2009-04-19 12 views
1

KeyPressイベントと同様に、EventArgsクラスでe.Handledを設定できるように、イベントを購読している人がいてほしいです。彼らが真実に戻っても、私はもはや発砲イベントを続行しない。どのようにこれを実装するためのアイデア?今、ここに私の方法である:さらなるイベントの処理を停止するにはどうすればいいですか?

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

私の理解から、イベントを購読している誰もがそう真e.Handled =を設定し、通知を受信します。ここでは何の効果もありません。 Delegate.GetInvocationListを使用してソリューションの

+0

私はあなたがこの例では、リスナーのパターンによりトラップされていると思います。すべてのコードを制御しますか? – ojblass

+0

今、私はすべてのコードを管理していますが、私はプラグインモデルを実装しているので、将来はないかもしれません。基本的にはイベントがあり、そのイベントを処理するための最初のプラグインでは、他のプラグインで追加の処理を実行する必要はありません。私がするいくつかの出来事。 – esac

答えて

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); 
     } 
    } 
} 
関連する問題