2 つのイベント ハンドラーを持つコードがあります。これら 2 つのイベント ハンドラーが、実行すべき作業があることを別のメソッドに通知するようにします。
私は ManualResetEvent を使用してこれを実装しましたが、これが私が望むものを達成するための最良の方法であるかどうか、またはより良い方法があるかどうかはわかりません。
static ManualResetEvent autoEvent = new ManualResetEvent(false);
void begin() {
ThreadPool.QueueUserWorkItem(new WaitCallback(genericHandler));
}
void OnEvent1(object sender) {
autoEvent.Set();
}
void OnEvent2(object sender) {
autoEvent.Set();
}
void genericHandler(object info) {
while (true) {
autoEvent.WaitOne();
// do some work
}
}
私が持っている最も重要な質問の 1 つは、次のとおりautoEvent.WaitOne()
です。その間、別のイベントがトリガーSet()
され、genericHandler がWaitOne()
再び到達する前に呼び出されます。WaitOne に再び到達したとき、別の を待つか、またはに到達する前に a が呼び出されSet()
た場合は続行しますか?Set()
WaitOne()
これは、C# で複数のパブリッシャーと 1 つのサブスクライバー パターンを実装するための最良の方法ですか? または、ManualResetEvent の代わりに別のものを使用する必要がありますか?
注: Event1 と Event2 の優先度が異なるため、genericHandler は別のスレッドにあるため、ハンドラでは、Event2 を確認する前に、Event1 に保留中の作業があるかどうかを確認します。