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

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

У меня в OnStart отключен цикл:

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

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

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

Ответы [ 2 ]

40 голосов
/ 16 марта 2009

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
    }
6 голосов
/ 16 марта 2009

Метод OnStart не должен блокироваться. Вам нужно создать рабочий поток, который будет выполнять эту работу. Вы также можете взглянуть на класс FileSystemWatcher для поиска уведомлений об изменениях файловой системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...