【发布时间】:2014-01-03 10:09:42
【问题描述】:
这是处理我的服务的类:
Imports System.Timers
Imports System.Configuration
Public Class Service
Private _lastRun As DateTime = DateTime.Now
Private ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Protected Overrides Sub OnStart(ByVal args() As String)
log.Info("Service started.")
Dim timer As New System.Timers.Timer(1 * 60 * 1000)
AddHandler timer.Elapsed, AddressOf timer_Elapsed
timer.Start()
End Sub
Private Sub timer_Elapsed(sender As Object, e As System.Timers.ElapsedEventArgs)
Dim now As DateTime = DateTime.Now
If now.Minute > _lastRun.Minute Then
Dim m As New Main()
m.Main()
m = Nothing
End If
_lastRun = now
End Sub
Protected Overrides Sub OnStop()
log.Info("Service is stopped")
End Sub
End Class
一分钟后,Main 方法被执行。 Main 方法的运行时间是不可预测的。如果执行时间超过一分钟,则执行另一个 Main 方法。我会禁止这种行为,所以如果Main 方法仍在运行Main 方法的新实例,则必须禁止。我能做些什么?
【问题讨论】:
-
将 AutoReset 属性设置为 False,使其仅触发一次。在 Elapsed 事件处理程序结束时调用 Start() 以使其再次触发。
标签: vb.net timer windows-services