我需要使用用户输入的小时和分钟在特定时间执行任务。
我正在考虑使用某种循环,每次循环,检查Now().Hour
匹配HourChoice
和Now().Minute
是否匹配MinuteChoice
< / p>
在此,我还有一个用户选项可以选择“AM”或“PM”,如果TimeOfDay = "PM"
,则添加12个小时(Now().Hour
是军事时间)。
编辑:我只想让它一次运行一次,而不是每天运行。
答案 0 :(得分:2)
您可以使用System.Threading.Timer
执行此操作。您可以将Timer
的时间间隔设置为现在与所选时间之间的差异,而将TimerCallback
设置为执行该时间的Sub
,而不是经常运行和休眠的循环。任务工作。将超时设置为0或Timeout.Infinite
将确保仅执行一次。
编辑:示例
Dim tcb As TimerCallback = AddressOf DoStuff
Dim t As Timer
Dim execTime As TimeSpan
Dim dtNow As DateTime = DateTime.Now
Dim hc As Integer = HourChoice
Dim mc As Integer = MinuteChoice
If TimeOfDay = "AM" And hc = 12 Then
hc = 0
Else If TimeOfDay = "PM" Then
hc = hc + 12
End If
Dim dtCandidate As DateTime = New DateTime(dtNow.Year, dtNow.Month, dtNow.Day, hc, mc, 0)
If dtCandidate < dtNow Then
dtCandidate.AddDays(1)
End If
execTime = dtCandidate.Subtract(dtNow)
t = New Timer(tcb,Nothing,execTime,TimeSpan.Zero)
然后你只需要一个Sub来完成你的任务:
Public Sub DoStuff(obj As Object)
'...Do Some Kind of Work
End Sub
答案 1 :(得分:0)
你不必循环,
只需在表单中添加一个Timer,将其间隔设置为500,以便每500毫秒触发一次
通过按钮启用它以启动任务。
然后在你的Timer.Tick事件上:
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If Hour(Now) = HourChoice And Minute(Now) = MinuteChoice Then
'Your Task Here
End If
End Sub
答案 2 :(得分:0)
未经测试但应该可行。在TimeSpan中,您可以设置天,小时,分钟,秒。
Private timer As System.Threading.Timer = New System.Threading.Timer(AddressOf DoWhatever, Nothing, New TimeSpan(0, 10, 0, 0), -1)
Private Sub dowhatever(sender As Object, e As Timers.ElapsedEventArgs)
' Do stuff
End Sub
更多信息可以在MSDN
找到答案 3 :(得分:0)
添加这个问题的答案有点迟了,但是:您可以使用标准的System.Windows.Forms.Timer。将时间间隔设置为所需时间与Now()之间的差值(以毫秒为单位),然后启动计时器。