我有一段代码有两个事件处理程序。我希望这两个事件处理程序通知另一个方法有一些工作要做。
我已经使用 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
}
}
我遇到的最重要的问题之一是:之后autoEvent.WaitOne()
,我做了一些工作,而这些工作会消耗时间。与此同时,另一个事件被触发,并Set()
在 genericHandler 再次到达之前被调用WaitOne()
。当再次到达 WaitOne 时,它会等待另一个Set()
,或者如果Set()
在到达之前已经调用了 a 则继续WaitOne()
?
这是在 C# 中实现多个发布者和一个订阅者模式的最佳方式吗?或者我应该使用其他东西而不是 ManualResetEvent?
注意:genericHandler 位于不同的线程中,因为 Event1 和 Event2 具有不同的优先级,所以在处理程序中我检查 Event1 是否有待处理的工作,然后再检查 Event2。