如何停止处理其他事件
问题描述:
与KeyPress事件类似,我希望订阅该事件的任何人都能够在我的EventArgs类中设置e.Handled。如果他们回复真实,我不想再继续开火。任何想法如何实现这一点?现在,这里是我的方法:如何停止处理其他事件
protected void OnDataReceived(SocketAsyncEventArgs e)
{
if (DataReceived != null)
{
DataReceived(this, e);
}
}
从我的理解,大家谁订阅了该事件将收到通知,所以设置e.Handled = TRUE;在这里没有任何效果。使用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);
}
}
}
我想你已经被困在这种情况下,监听器模式。你是否控制了所有的代码? – ojblass 2009-04-19 07:45:04