与KeyPress事件类似,我希望订阅该事件的任何人能够在我的EventArgs类中设置e.Handled。如果它们返回true,我不再想继续发射事件。任何想法如何实现这一点?现在,这是我的方法:
protected void OnDataReceived(SocketAsyncEventArgs e)
{
if (DataReceived != null)
{
DataReceived(this, e);
}
}
根据我的理解,订阅该活动的每个人都会收到通知,因此设置e.Handled = true;这里没有任何效果。
答案 0 :(得分: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);
}
}
}