Служба Windows и программирование потоков .NET - PullRequest
1 голос
/ 23 декабря 2009

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

Ответы [ 3 ]

1 голос
/ 23 декабря 2009

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

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

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

1 голос
/ 23 декабря 2009

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

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

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

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

1 голос
/ 23 декабря 2009

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

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

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