Службы Windows: цикл OnStart - мне нужно делегировать?
У меня есть служба Windows, которая каждые 10 секунд сканирует папку. Я получаю "служба не реагировала на стартовую команду своевременно" при попытке запустить ее.
В OnStart у меня отключен цикл:
public void OnStart(string[] args)
{
while (!_shouldExit)
{
//Do Stuff
//Repeat
Thread.Sleep(_scanIntervalMillis);
}
}
Это то, что вызывает ошибку? Должен ли я делегировать этот метод?
Ответы
Ответ 1
OnStart должен только запускать работу; он не несет ответственности за это. Обычно это означает, что для создания реальной работы создается новый поток. Ожидается, что OnStart завершится быстро. Например:
public void OnStart(string[] args) // should this be override?
{
var worker = new Thread(DoWork);
worker.Name = "MyWorker";
worker.IsBackground = false;
worker.Start();
}
void DoWork()
{
// do long-running stuff
}
Ответ 2
Метод OnStart не должен блокироваться. Вам нужно создать рабочий поток, который будет выполнять эту работу. Вы также можете взглянуть на класс FileSystemWatcher для сканирования уведомлений об изменении файловой системы.