Я пытаюсь сделать что-то вроде этого:
EventWaitHandle handler = new EventWaitHandle(false, EventResetMode.AutoReset)
//This code will run in background thread
private void AsyncWait() {
while (true) {
handler.WaitOne();
//LongRunningOperation()
}
}
В другом месте кода будут методы, которые вызывают:
handler.Set()
Итак, выполняется LongRunningOperation().
Проблема в том, что handler.Set()
можно вызвать снова, пока поток AsyncWait()
выполняет LongRunningOperation()
.
Это означает, что LongRunningOperation()
никогда не будет вызываться всякий раз, когда вызывается handler.Set()
, пока AsyncWait()
все еще выполняет LongRunningOperation()
.
Как сделать это правильно? :(
handler.Set()
,handler.Set()
,handler.WaitOne()
,handler.WaitOne()
, хотите ли вы, чтобы последнийWaitOne()
не блокировался, потому чтоSet
уже вызывался дважды? - person Scott Chamberlain   schedule 06.11.2013EventResetMode.AutoReset
, поэтому, даже когдаLongRunningOperation()
работает,handler
уже был (автоматически) сброшен, поэтому, когда вы вызываетеhandler.Set()
во времяLongRunningOperation()
, это не приведет к блокировке следующегоhandler.WaitOne();
, поскольку он уже был сброшен сразу после его ожидания. Так что либо проблемы нет, либо я думаю, что не вижу ясно вашей проблемы... - person Stormenet   schedule 06.11.2013Pass: 1 Pass: 2
- person Stormenet   schedule 06.11.2013