Поскольку BackgroundWorker
реализует IDisposable
, вы должны утилизировать его, когда закончите с ним.
Вы упоминаете, что это в службе Windows, поэтому здесь есть несколько вещей, которые вступают в игру. Когда вы останавливаете службу Windows, вы получаете около 30 секунд для возврата из метода OnStop
в вашей реализации ServiceBase
. Если вы не вернетесь в течение этого времени, Windows сообщит пользователю, что не может остановить службу. Что вы должны сделать, это сообщить BackgroundWorker
, что вам нужно остановить его (используя механизм CancelAsync
), избавиться от работника и выйти. Однако, поскольку вы останавливаете службу, на самом деле это не имеет значения, так как весь процесс будет остановлен в любом случае , включая все потоки, которые в нем работают.
Если вы должны были сделать, как вы говорите, и ждать завершения рабочего (в методе OnStop
), ваш сервис может показаться пользователю, как если бы он завис, поскольку Windows скажет, что он не может остановить его, и процесс все еще будет запущен.