我有一个用 VS 2010 / .NET 4.0 编写的 Windows 服务。
该服务遵循以下代码片段的方案:使用计时器,它每几分钟执行一些所需的行为。每隔几分钟执行一次“期望行为”的要求现在已经发展为大约需要 10 秒的工作。
我在该服务中只需要一个线程,没有理由创建多个线程,这就是为什么我将 Windows 服务称为单线程。
我担心的是,如果有人通过管理控制台停止服务,那么服务可能只是在这 10 秒的工作中偶尔执行。
我已经阅读了一些关于 SO 以及如何停止服务的内容,但有点迷失了。有时会创建 WorkerThreads,有时会创建 ManualResetEvents,但到目前为止,我还不能完全掌握 Windows 服务的最佳前进方向。
我在想我需要在 10 秒执行期间检查某种标志,然后只有在该标志没有告诉我应该停止时才继续。在 onStop 方法中,我可能需要等到处理正确完成。
理论就这么多;),但是我最好的前进方式是什么,同时考虑下面的代码片段?
谢谢大家!
Public Class MyService
Public _timer As System.Timers.Timer
Protected Overrides Sub OnStart(ByVal args() As String)
_timer = New System.Timers.Timer()
'more timer settings
AddHandler _timer.Elapsed, AddressOf _timer_Tick
_timer.Start()
End Sub
Protected Overrides Sub OnStop()
' ????????????????????????
End Sub
Private Sub _timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
SyncLock Me
try
_timer.Stop()
catch ex as Exception
finally
_timer.Start()
end try
End SyncLock
End Sub
End Class