каков синтаксис 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);