7

我正在更新一些旧的托管 C++ 代码,如下所示:

instanceOfEventSource->add_OnMyEvent( 
    new EventSource::MyEventHandlerDelegate(this, MyEventHandlerMethod) );

在哪里

  • EventSource是发布事件的类
  • instanceOfEventSource是该类的一个实例
  • EventSource::MyEventHandlerDelegate是事件的委托类型
  • MyEventHandlerMethod是当前类(其中“this”是一个实例)中的(非静态)方法,其签名匹配 EventSource::MyEventHandlerDelegate

在 C++/CLI 中正确的语法是什么?

4

2 回答 2

7

语法类似于 C# 的,换句话说,+=被重载以使这成为可能:

instanceOfEventSource.MyEvent +=
    gcnew EventSource::MyEventHandlerDelegate(this, &MyClass::MyEventHandlerMethod);

类似地用于移除。然而,与 C# 不同的是,您不能忽略事件处理程序委托的显式实例化,因此这会产生相当冗长的代码。

于 2009-01-28T22:15:27.523 回答
2

我刚刚花了半个小时试图弄清楚如何将静态方法注册为事件的回调方法。虽然 OP 没有特别要求注册静态方法,但这将有助于其他面临同样问题的人。这实际上非常简单,在这种情况下,委托构造函数只为静态目标方法采用一个参数。

例子:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);
于 2015-09-20T01:53:03.560 回答