Служба Windows не запускается полностью

Я сделал эту маленькую службу Windows в C#, и я считаю, что, возможно, что-то не так с моим кодом ThreadPool, который мешает моей службе Windows полностью запуститься. Если вы должны знать, что служба Windows, кажется, работает отлично только тогда, когда при взгляде на консоль служб она все еще заявляет, что она "запускается". Когда я перезапустил свой сервер, сервис, кажется, снова остановился, хотя я установил его в автоматический запуск.

Пожалуйста, смотрите мой код ниже:

protected override void OnStart(string[] args)
{
     int itemCount = itemList.Count;

     this.doneEvents = new ManualResetEvent[itemCount];
     for (int i = 0; i < itemCount; i++)
     {
         int oId = this.itemList[i];
         this.doneEvents[i] = new ManualResetEvent(false);

         ThreadPool.QueueUserWorkItem(data =>
         {
             while (this.activated)
             {
                 DateTime start = DateTime.Now;

                 // my code here

                 // choke point
                 TimeSpan duration = (DateTime.Now - start);
                 if (duration.Milliseconds < CONST_WAITMILLISECONDS)
                    Thread.Sleep((CONST_WAITMILLISECONDS - duration.Milliseconds));
              }

              this.doneEvents[i].Set(); // thread done

            }, oId);
         }

         WaitHandle.WaitAll(doneEvents);

}

2 ответа

Решение

Я думаю, что вы могли бы обернуть логику внутри OnStart в потоке. Эта тема будет закрыта, когда вы получите OnStop событие.

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

Thread _ServiceThread;
protected override void OnStart(string[] args) { 
    _ServiceThread = new Thread(() => { /* your current OnStart logic here...*/ });
    _ServiceThread.Start();
}
protected override void OnStop() {
    _ServiceThread.Stop();
}

Вы блокируете OnStart позвонить по WaitHandle.WaitAll(doneEvents);, Windows пытается запустить службу, но время ожидания истекло из-за WaitAll,

Вы должны позволить OnStart Завершите, если хотите, чтобы Windows воспринимала службу как запущенную.

Другие вопросы по тегам