我在VB.NET中創建了Windows服務。 OnStart創建一個工作線程並返回。工作線程啓動正常並嘗試連接到數據庫。如果建立連接,則線程進入無限循環,這是預期的行爲。Windows服務:如何在工作線程停止時觸發OnStop
Dim _shutdown As Boolean = False
Private _oPollingThread As Thread
Protected Overrides Sub OnStart(ByVal args() As String)
_oPollingThread = New Thread(New System.Threading.ThreadStart(AddressOf PollProcess))
_oPollingThread.Start()
End Sub
如果服務被手動關閉(由Windows用戶進入服務並單擊停止),調用OnStop設置一個布爾值;工作線程看到這個併成功關閉它,OnStop加入,服務停止。都好。
Protected Overrides Sub OnStop()
_shutdown = True
' Allow poll process to shut down gracefully (give it up to ten seconds...)
Dim shutdownCount As Integer = 0
Do While _oPollingThread.Join(1000) = False And shutdownCount < 10
shutdownCount = shutdownCount + 1
Loop
If _oPollingThread.IsAlive = True Then
_oPollingThread.Abort()
End If
End Sub
問題是,如何讓服務停止,如果工作線程不連接到數據庫?一旦工作線程終止(而不是進入其無限循環),Windows服務將保持活動狀態,並且OnStop不會運行。
你可以使用背景工作嗎?它完成後會引發一個RunWorkerCompleted事件,所以你只需要一個處理該事件的子組件。 http://stackoverflow.com/questions/5551258/c-net-how-to-alert-program-that-the-thread-is-finished-event-driven –
這工作。謝謝,Tony Hinkle。 – user3076228