2009-04-19 108 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); 
     } 
    } 
} 
相關問題