2013-07-07 39 views
1

我有一個基本的Windows服務,它執行一些任務,這些任務在無限循環中定期執行:「ExecuteServiceWorkerMethods()」。 我開始通過工作線程的無限循環從下面的的OnStart()方法:如何處理基本Windows服務中的OnStop方法中的工作線程?

OnStart(string[] args) 
{ 
     workerThread = new Thread(ExecuteServiceWorkerMethods); 
     workerThread.Name = "ServiceWorkerThread"; 
     workerThread.IsBackground = false; 
     workerThread.Start(); 
} 

現在我想知道如何處理在調用OnStop()方法的工作線程呢?

我的死循環是這樣的:

private void ExecuteServiceWorkerMethods() 
{ 
     while (!serviceStopped) 
     { 

    DO WORK.... 

      while (servicePaused) 
      { 
       Thread.Sleep(sleepTimeMillisecondsWhileServicePaused); 
      } 
     Thread.Sleep(sleepTimeMillisecondsWhileServiceNotStopped); 
     } 
} 

記住,這是所有非常基本的。我只是想能夠啓動和停止我的Windows服務。

+0

您的兩次睡眠時間對於暫停和停止有多長時間? DO WORK部分需要多長時間?你能顯示你當前的OnStop方法嗎? – hatchet

+0

ExecuteServiceWorkerMethods()是一個無限循環。 在DO工作中,各種方法都是定期執行的。 sleepTime變量當前爲300毫秒。 目前我在OnStop()方法中使用workerThread.Abort()。 – RuneHansen

+0

可能的重複[如何在不使用計時器的Windows服務中產生循環](http://stackoverflow.com/questions/2032808/how-to-have-a-loop-in-a-windows-service-不使用定時器) –

回答

0

看起來你的代碼很接近密碼here

你應該能夠使用這樣的事情:

protected override void OnStop() 
{ 
    // flag to tell the worker process to stop 
    serviceStopped = true; 

    // give it a little time to finish any pending work 
    workerThread.Join(new TimeSpan(0,2,0)); 
} 

到。加入的調用將導致線程終止。

+0

嗨布拉德布魯斯,感謝您的意見。 但是在上面鏈接的清單7中,寫入: Thread.CurrentThread.Abort(); 據我所見,這個代碼將在OnStop()方法執行時執行? 那好嗎?它不拋出異常嗎? – RuneHansen

+0

哇。我沒有看到。它不起任何作用。當你到達那條線時,你的線程即將終止。最後只需註釋.Abort行。 –

+0

所以我在我的Windows服務中實現了workerThread.Join(aLittleTime),它似乎在我想要的時候開始和停止。 – RuneHansen

相關問題