イベントに関連付けられたメソッドが特定の条件で実行されているかどうかをチェックするテストを作成しています。ハンドラが実行されていることを確認するために、スリープ(x ms)を追加してハンドラが結果を確認する前に実行を終了したことを確認します。すべてのイベントハンドラがいつ実行を終了したかを知る方法?
イベントのすべてのハンドラが実行を終了したときに通知する方法はありますか?
イベントに関連付けられたメソッドが特定の条件で実行されているかどうかをチェックするテストを作成しています。ハンドラが実行されていることを確認するために、スリープ(x ms)を追加してハンドラが結果を確認する前に実行を終了したことを確認します。すべてのイベントハンドラがいつ実行を終了したかを知る方法?
イベントのすべてのハンドラが実行を終了したときに通知する方法はありますか?
イベントハンドラが順番に呼び出されます。したがって、イベント自体にサブスクライブします。あなた自身のハンドラは、すでに登録されているすべてのハンドラの直後に呼び出されます。
事前にハンドラ/イベントの数を知っている場合はInterlocked
とManualResetEvent
でこれを達成できます。テストの開始時に
、ハンドラの数を格納し、イベント設定:イベントハンドラメソッドに続いて
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();
非常に良い答えです。シンプルでそれは私のために働く:) –