BackgroundWorker против фоновой темы - PullRequest
157 голосов
/ 02 октября 2009

У меня есть стилистический вопрос о выборе реализации фонового потока, который я должен использовать в приложении Windows Form. В настоящее время у меня есть BackgroundWorker в форме, которая имеет бесконечный цикл (while(true)). В этом цикле я использую WaitHandle.WaitAny, чтобы поток дремал, пока не произойдет что-то интересное. Один из дескрипторов события, которого я жду, - это событие "StopThread", чтобы я мог выйти из цикла. Это событие сигнализируется, когда из моего переопределенного Form.Dispose().

Я где-то читал, что BackgroundWorker действительно предназначен для операций, с которыми вы не хотите связывать пользовательский интерфейс и которые имеют конечный конец - например, загрузка файла или обработка последовательности элементов. В этом случае «конец» неизвестен и только тогда, когда окно закрыто. Поэтому для меня было бы более уместным использовать фоновый поток вместо BackgroundWorker для этой цели?

Ответы [ 11 ]

0 голосов
/ 17 ноября 2017

Что меня смущает, так это то, что дизайнер Visual Studio позволяет вам использовать только BackgroundWorkers и Timers, которые на самом деле не работают с сервисным проектом.

Это дает вам аккуратные элементы управления перетаскиванием на ваш сервис, но ... даже не пытайтесь развернуть его. Не сработает.

Услуги: Используйте только System.Timers.Timer System.Windows.Forms.Timer не будет работать, даже если он доступен в наборе инструментов

Услуги: BackgroundWorkers не будет работать, когда он работает как сервис Вместо этого используйте System.Threading.ThreadPools или Async вызывает

...