Как я могу остановить обработку дальнейших событий - PullRequest
1 голос
/ 19 апреля 2009

Подобно событиям KeyPress, я хочу, чтобы тот, кто подписан на событие, мог установить e.Handled в моем классе EventArgs. Если они вернут истину, я больше не хочу продолжать стрельбу событиями. Есть идеи, как это реализовать? Прямо сейчас, вот мой метод:

protected void OnDataReceived(SocketAsyncEventArgs e)
{
    if (DataReceived != null)
    {                
        DataReceived(this, e);
    }
}

Насколько я понимаю, каждый, кто подписан на это событие, получит уведомление, поэтому настройка e.Handled = true; не будет иметь никакого эффекта здесь.

1 Ответ

4 голосов
/ 19 апреля 2009

Пример кода для решения с использованием Delegate.GetInvocationList:

public class MyEventArgs : EventArgs
{
    public bool Handled { get; set; }
}

public class SomeClass
{
    public event EventHandler<MyEventArgs> SomeEvent;

    protected virtual void OnSomeEvent(MyEventArgs e)
    {
        var listeners = SomeEvent.GetInvocationList();
        foreach (var listener in listeners)
        {
            if (e.Handled) break;
            ((EventHandler<MyEventArgs>)listener).Invoke(this, e);
        }
    }
}
...