2009-04-19 139 views
1

与KeyPress事件类似,我希望订阅该事件的任何人都能够在我的EventArgs类中设置e.Handled。如果他们回复真实,我不想再继续开火。任何想法如何实现这一点?现在,这里是我的方法:如何停止处理其他事件

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

从我的理解,大家谁订阅了该事件将收到通知,所以设置e.Handled = TRUE;在这里没有任何效果。使用Delegate.GetInvocationList解决

+0

我想你已经被困在这种情况下,监听器模式。你是否控制了所有的代码? – ojblass 2009-04-19 07:45:04

回答

4

示例代码:

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); 
     } 
    } 
}