Сигнализация с помощью WaitHandle — правильный путь, но просто чтобы добавить к тому, что уже сказали другие.
Я обычно использовал 2 сигнала, работающих вместе, иначе вы не знали бы, следует ли «продолжить» или «выйти», когда это необходимо, или пришлось бы прибегать к менее изящному способу сделать это (остановка потока - конечно, есть есть и другие способы сделать что-то подобное, только один «шаблон»). Так что обычно это работает с сигналом «выход» и сигналом «доступна новая работа» — работая в унисон. например
WaitHandle[] eventArray = new WaitHandle[2] { _exitEvent, _newWorkEvent };
while ((waitid = WaitHandle.WaitAny(eventArray, timeout, false)) > 1)
{
// do your work, and optionally handle timeout etc.
}
примечание:
выход – это ManualResetEvent
с начальным состоянием "false" – событие "Set" для выхода.
_newWork
– это либо Manual
, и в этом случае вам нужно приостановить/продолжить извне, чего вы и хотели, я думаю -
... или также может быть new AutoResetEvent(false)
, который вы «сигнализируете» для выполнения одного цикла работы, сигнал сразу же возвращается к «ложному» — и вам нужно повторять это для каждой «новой партии» работы — это немного упрощено . (часто это идет рука об руку с передачей некоторых «сообщений», конечно, каким-то образом синхронизированных).
Надеюсь, это добавит больше информации,
person
NSGaga-mostly-inactive
schedule
06.04.2012