我需要使用用户输入的小时和分钟在特定时间执行任务。
我正在考虑使用某种循环,每次循环时,检查 Now().Hour
匹配项HourChoice
和匹配项是否Now().Minute
匹配MinuteChoice
在此,我还有一个用户选项来选择“上午”或“下午”,如果是TimeOfDay = "PM"
,则添加 12 小时(这Now().Hour
是军事时间)。
编辑:我只希望它一次运行一次,而不是每天运行一次。
我需要使用用户输入的小时和分钟在特定时间执行任务。
我正在考虑使用某种循环,每次循环时,检查 Now().Hour
匹配项HourChoice
和匹配项是否Now().Minute
匹配MinuteChoice
在此,我还有一个用户选项来选择“上午”或“下午”,如果是TimeOfDay = "PM"
,则添加 12 小时(这Now().Hour
是军事时间)。
编辑:我只希望它一次运行一次,而不是每天运行一次。
您可以使用 aSystem.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
您不必循环,
只需在表单中添加一个 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
未经测试,但应该可以。在 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上找到
添加这个问题的答案有点晚了,但是:您可以使用标准的 System.Windows.Forms.Timer。将间隔设置为所需时间和 Now() 之间的毫秒差,然后启动计时器。