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