2009-12-23 3 views
1

Я разработал службу Windows для обработки файлов, записи которых будут храниться в базе данных. Когда служба Windows находит файл, он создает поток и назначает каждый файл одному потоку. Я не использовал пул потоков. Я хотел знать, когда остановлена ​​служба Windows, как определить, сколько потоков запущено и завершены ли они. Если все потоки выполнены, то служба Windows может быть успешно остановлена. Служба Windows Otherwis должна ждать, пока все потоки будут выполнены или прерваны. Как это реализовать.Windows Service And Thread Programming .NET

ответ

1

Вы всегда можете сохранить Thread объектов в списке и управлять ими оттуда.

Что-то вроде:

List<Thread> workerThreads = new Lits<Thread>(); 
Tread workerThread = new Thread(...); 
workerThreads.Add(workerTread); 
workerThreads.Start(); 
1

Вы должны держать список запущенных потоков. Вы можете добиться этого, добавив каждый новый поток в список (перед запуском), а рабочий метод удаляет поток из списка (напрямую или путем создания события на объекте контроллера).

В принципе, вам нужно заботиться об этом самостоятельно.

Надеюсь, это поможет

1

Когда служба окон остановлена?

Когда он закрыт с помощью SCM, вы можете проверить OnStop событие для отслеживания заключительного мероприятия

как определить, сколько потоков выполняются и являются ли они в комплекте? Просто сохраните каждый поток, который вы создали в массиве или списке, и чтобы проверить, работает ли поток, вы можете установить логическую переменную в конце функции потока.

Чтобы закрыть службу при определенных условиях, вы можете использовать метод Environment.Exit.

+0

Вам не нужно добавлять логическое значение. Просто проверьте состояние потока. Он уже говорит, если поток остановлен или нет. –

+1

Я знаю, что вы можете проверить свойство ThreadState, но это вызывает много проблем, если вы полагаетесь на него; проверьте это http://stackoverflow.com/questions/1010030/what-value-is-the-threadstate-property –