私はVBの.Netサービスを持っています。これは、基本的にタイマーが行うべきことをタイマーの代わりにSystem.Threadingを使用しています。私の問題は、スレッドがスリープ状態にある間にサービスを停止することです。スレッドがスリープしている間に.Netサービスが停止しない
Imports System.Threading
Public Class AService
Private stopping As Boolean
Private stoppedEvent As ManualResetEvent
Public Sub New()
InitializeComponent()
Me.stopping = False
Me.stoppedEvent = New ManualResetEvent(False)
End Sub
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
End Sub
Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
Me.stopping = True
Me.stoppedEvent.WaitOne()
End Sub
Private Sub ServiceWorkerThread(ByVal state As Object)
' Periodically check if the service is stopping.
Do While Not Me.stopping
' Perform main service function here...
' do anything here and wait 15 minutes before doing it again
Thread.Sleep(15 * 60000) ' Sleep for interval
Loop
' Signal the stopped event.
Me.stoppedEvent.Set()
End Sub
End Class
サービスが開始されてから1分後には、15分間隔のティックとスレッドが起動するまで停止できません。サービスが停止しようとしている信号をキャッチしてスレッドを中断する方法はありますか?
保護レベルのため、_TerminationHandle.Dispose()にアクセスできません。何か案は?これは完璧な解決策です。 –
.Net 3.5を使用していましたが、4.0に切り替えました。私はいくつかのテストを行う必要がありますが、ありがとう、これは素晴らしいコードベースです –
ああ、私はそれが最近追加されたことを知らなかった。以前のバージョンの.Netでは '.Close()'を代わりに使うことができます。私は答えを書き留めました。ありがとう! –