2017-01-11 3 views
0

イベントに関連付けられたメソッドが特定の条件で実行されているかどうかをチェックするテストを作成しています。ハンドラが実行されていることを確認するために、スリープ(x ms)を追加してハンドラが結果を確認する前に実行を終了したことを確認します。すべてのイベントハンドラがいつ実行を終了したかを知る方法?

イベントのすべてのハンドラが実行を終了したときに通知する方法はありますか?

答えて

1

イベントハンドラが順番に呼び出されます。したがって、イベント自体にサブスクライブします。あなた自身のハンドラは、すでに登録されているすべてのハンドラの直後に呼び出されます。

+0

非常に良い答えです。シンプルでそれは私のために働く:) –

0

事前にハンドラ/イベントの数を知っている場合はInterlockedManualResetEventでこれを達成できます。テストの開始時に

、ハンドラの数を格納し、イベント設定:イベントハンドラメソッドに続いて

int noOfHandlers = 3; //or however many 
ManualResetEvent handlersFinishedEvent = new ManualResetEvent(false); 

を:

public void OnEvent(EventArgs e) 
{ 
    // do event stuff 
    if (Interlocked.Decrement(ref noOfHandlers) == 0)) 
    { 
     // only the last handler will come in here 
     handlersFinishedEvent.Set(); 
    } 
} 

次に、あなたのテストスレッドは、単に上の待機は、すべてのイベントが完了したときにのみトリガーされます。

handlersFinishedEvent.WaitOne(); 
関連する問題