1

KeyPress イベントと同様に、イベントをサブスクライブする人は誰でも、EventArgs クラスで e.Handled を設定できるようにしたいと考えています。それらが true を返した場合、イベントの発生を継続したくありません。これを実装する方法はありますか?今、ここに私の方法があります:

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

私の理解では、イベントにサブスクライブしているすべての人が通知を受け取るので、e.Handled = true; を設定します。ここでは効果がありません。

4

1 に答える 1

4

を使用したソリューションのサンプルコード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);
        }
    }
}
于 2009-04-19T12:18:50.073 に答える