我做在C#中这个小窗口服务,我相信我可能做错了我的线程池代码,阻止我的Windows服务从完全开始。如果您必须知道,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);
}
你有代码,以一个间接层。对OnStart()**的调用必须及时返回(例如,在30秒内)。否则,操作系统将终止该服务。因此,你需要把当前的逻辑在'的OnStart()'方法()''被催生的OnStart线程,即一个间接层。 – 2011-06-08 03:09:21