Подтвердить что ты не робот

Службы Windows: цикл OnStart - мне нужно делегировать?

У меня есть служба Windows, которая каждые 10 секунд сканирует папку. Я получаю "служба не реагировала на стартовую команду своевременно" при попытке запустить ее.

В OnStart у меня отключен цикл:

 public void OnStart(string[] args)
 {
    while (!_shouldExit)
    {
        //Do Stuff

        //Repeat
        Thread.Sleep(_scanIntervalMillis);
    }
 }

Это то, что вызывает ошибку? Должен ли я делегировать этот метод?

4b9b3361

Ответ 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 для сканирования уведомлений об изменении файловой системы.