[英]Windows Service not completely starting
我在 c# 中制作了这个小的 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);
}
您正在通过WaitHandle.WaitAll(doneEvents);
阻止OnStart
调用 . Windows 尝试启动服务,但由于WaitAll
超时。
如果您希望 Windows 将服务视为已启动,则需要让OnStart
完成。
我认为您可以将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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.