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

Я сделал эту небольшую службу Windows в С#, и я считаю, что, возможно, что-то не так с моим кодом 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 рассматривала сервис как запущенный.

licensed under cc by-sa 3.0 with attribution.