Pregunta

Estoy actualizando un código antiguo de C ++ administrado con líneas como esta:

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

donde

  • EventSource es la clase que publica eventos
  • instanceOfEventSource es una instancia de esa clase
  • EventSource :: MyEventHandlerDelegate es el tipo de delegado para el evento
  • MyEventHandlerMethod es un método (no estático) dentro de la clase actual (de la cual " esta " es una instancia) con la firma que coincide con EventSource :: MyEventHandlerDelegate

¿Cuál es la sintaxis correcta para esto en C ++ / CLI?

¿Fue útil?

Solución

La sintaxis es similar a la de C #, en otras palabras, += se sobrecarga para que esto sea posible:

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

Análogamente para la eliminación. Sin embargo, a diferencia de C #, no puede omitir la instanciación explícita del delegado del controlador de eventos, por lo que esto produce un código bastante largo.

Otros consejos

Acabo de pasar media hora tratando de descubrir cómo registrar un método estático como método de devolución de llamada para un evento. Si bien el OP no solicitó específicamente el registro de métodos estáticos, esto será útil para otras personas que enfrentan el mismo problema. En realidad es muy simple, en ese caso el constructor delegado toma solo un parámetro para el método de destino estático.

Ejemplo:

System::EventHandler^ h = gcnew System::EventHandler(&MyClass::MyStaticCallbackMethod);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top