我做在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