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 回答