使用c++/cli并在c#中使用它的事件处理

本文关键字:事件处理 c++ cli 并在 使用 | 更新日期: 2023-09-27 18:27:39

-每当调用方法showmessage时,我都想引发一个事件。我想在C#密码

-我已经为它写了事件。

-我在Initialize函数中所做的将委托与功能显示消息

-如何在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;
}

这就成功了

使用c++/cli并在c#中使用它的事件处理

为什么不能在c++/cli中使用EventHandler类并在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)
    {
    }
}

我还没试过这个。但我想值得一试。