我在VB.NET中编程,无法解决我遇到的问题。
我有一个计时器从一小时的第n分钟开始,例如站点号7从第7分钟开始,站点号56从第56分钟开始,站点号70从第10分钟开始(模数)。
所以我需要确定我的服务何时开始,我是否可以测试计时器是否应该运行。
因此,对于网站45,这将在每小时的第45分钟开始。如果服务在10:55开始,我不会在11:45之前测试这个计时器
我的头脑因为试图过多考虑而麻木,所以任何帮助都会很棒。
我只需要一个函数来测试站点计时器是否正在运行,基于偏移小时。
答案 0 :(得分:1)
这是有人已经问过的参考网址HERE,但看起来很短;检查:
If timer.enabled = true Then
'''Do stuff etc...
End If
答案 1 :(得分:1)
为什么不使用Windows Task Scheduler?
而不是随便摆弄计时器并不断检查您的服务是否需要启动?但是,这是尝试解决您的问题。您有一个整数(您的服务ID),并且您想根据业务规则检查何时需要启动:
Public Function WhenTimerHasToStart(serviceId As Int32) As Date
Dim minuteRemainder = serviceId Mod 60
Dim now = Date.Now
Dim dt = New Date(now.Year, now.Month, now.Day, now.Hour, minuteRemainder, now.Second)
If dt >= now Then
Return dt
Else
Return dt.AddHours(1)
End If
End Function
现在您知道计时器何时必须启动,因此服务可以使用timer.Change
(如果Threading.Timer
)使用正确的参数。例如:
Dim serviceId = 70
Dim timerStart = WhenTimerHasToStart(serviceId) ' 1/16/2018 05:10:17 PM
Dim offsetMillis As int32 = CInt((timerStart - Date.Now).TotalMilliseconds)
timer.Change(offsetMillis, Threading.Timeout.Infinite)