каков синтаксис C++/CLI для подписки на события?

Я обновляю некоторый старый управляемый код C++ с такими строками:

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

здесь

  • источник события - это класс, который публикует события
  • instanceOfEventSource является экземпляром этого класса
  • EventSource:: MyEventHandlerDelegate является типом делегата для события
  • MyEventHandlerMethod (не-static) метод в текущем классе (из которых "this" - это экземпляр) с сигнатурой, соответствующей EventSource:: MyEventHandlerDelegate

каков правильный синтаксис для этого в C++ / CLI?

2 ответов


синтаксис похож на C#, другими словами,+= перегружен, чтобы сделать это возможным:

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

аналогично для удаления. Однако, в отличие от C#, вы не можете опустить явный экземпляр делегата обработчика событий, поэтому это создает довольно длинный код.


Я только что потратил полчаса, пытаясь выяснить, как зарегистрировать статический метод как метод обратного вызова для события. Хотя OP специально не просил регистрировать статические методы, это будет полезно для других, сталкивающихся с той же проблемой. На самом деле это очень просто, в этом случае конструктор делегата принимает только один параметр для статического целевого метода.

пример:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);