the - raise event c#
¿Cómo implemento un evento cancelable? (1)
En System.ComponentModel, hay una clase llamada CancelEventArgs que contiene un miembro de cancelación que se puede establecer en los detectores de eventos. La documentación en MSDN explica cómo usar eso para cancelar eventos desde un oyente, pero ¿cómo lo uso para implementar mis propios eventos cancelables? ¿Hay alguna manera de verificar el miembro Cancelar después de que cada oyente dispara, o tengo que esperar hasta que el evento haya despedido a todos sus oyentes?
Para verificar cada escucha por turno, debe obtener manualmente los manejadores a través de GetInvocationList:
class Foo
{
public event CancelEventHandler Bar;
protected void OnBar()
{
bool cancel = false;
CancelEventHandler handler = Bar;
if (handler != null)
{
CancelEventArgs args = new CancelEventArgs(cancel);
foreach (CancelEventHandler tmp in handler.GetInvocationList())
{
tmp(this, args);
if (args.Cancel)
{
cancel = true;
break;
}
}
}
if(!cancel) { /* ... */ }
}
}