Служба 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 воспринимала службу как запущенную.