обработка событий с использованием c ++ / cli и использование его в c # - PullRequest
0 голосов
/ 14 марта 2012

-Я хочу вызывать событие всякий раз, когда вызывается метод showmessage. Я хочу перехватить его в коде C #.

-Я написал событие для него.

-Правильно ли эточто я сделал в функции Initialize, чтобы связать делегата с функцией showmessage

- как использовать это событие в c #

C++/CLI

delegate void progressmsgdisplay(System::String ^ message);
progressmsgdisplay  ^ progressMsgNotify;
void Mclass::ShowMessage(System::String ^ message)
{ 
MessageBox(NULL, m_msg, m_box, NULL);
notify(message);
}
event progressmsgdisplay ^ notify 
{
    void add(progressmsgdisplay ^ d) 
    {
        progressMsgNotify += d;
    }


    void remove(progressmsgdisplay ^ d) 
    {
        progressMsgNotify -= d;
    }


    void raise(System::String ^ msg)
    {
       progressmsgdisplay ^ tmp = progressMsgNotify;
               if (tmp) 
        {
        tmp->Invoke(msg);
        }

    }
}

//void Mclass::Initialize(System::String ^ strProgressMsg)
//{
// progressMsgNotify=gcnew progressmsgdisplay(this,&Mclass::ShowMessage);
//}

-Mclass - это имя класса, в котором всевышесказанное объявлено и определено

C#
void display(string progressnotification)
 {
    Console.Out.WriteLine(progressnotification);
 }
void initialize()
{
 first = new Mclass();
 first.notify()+=display;
}

, это сделало трюк

1 Ответ

1 голос
/ 14 марта 2012

Почему вы не можете просто использовать класс EventHandler в c ++ / cli и подписаться на него в C #

//C++/CLI
public ref class SomeClass
{
    public:
    event EventHandler^ someEvent;
}

//C#
class Program
{
    static void Main(string[] args)
    {
        SomeClass testclass = new SomeClass();
        testclass.someEvent += someEventHandler;
    }

    private void someEventHandler(Object obj, EventArgs args)
    {

    }
}

Я еще не пробовал это. Но я думаю, стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...