what is the C++/CLI syntax to subscribe for events

2020-02-14 03:05发布

I'm updating some old Managed C++ code with lines like this:

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

where

  • EventSource is the class that publishes events
  • instanceOfEventSource is an instance of that class
  • EventSource::MyEventHandlerDelegate is the delegate type for the event
  • MyEventHandlerMethod is a (non-static) method within the current class (of which "this" is an instance) with the signature matching EventSource::MyEventHandlerDelegate

What is the right syntax for this in C++/CLI?

2条回答
放我归山
2楼-- · 2020-02-14 03:16

I just spent half an hour trying to figure out how to register a static method as callback method for an event. While the OP did not specifically ask for registering static methods, this will be helpful to others facing the same problem. It's actually very simple, in that case the delegate constructor takes just one parameter for the static target method.

Example:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);
查看更多
太酷不给撩
3楼-- · 2020-02-14 03:33

The syntax is similar to C#'s, in other words, += is overloaded to make this possible:

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

Analogously for removal. Unlike C#, however, you may not omit the explicit instantiation of the event handler delegate so this produces quite long-winded code.

查看更多
登录 后发表回答