我需要在某個時間使用用戶輸入的小時和分鐘執行任務。VB.net在計劃時間執行任務
我想的有點像使用某種循環,每一次它循環的,如果檢查Now().Hour
比賽HourChoice
和Now().Minute
匹配MinuteChoice
在此,我也有一個用戶選項,選擇「 AM「或」PM「,如果是TimeOfDay = "PM"
,則加12小時(Now().Hour
是軍事時間)。
編輯:我只希望這個運行一次,而不是每一天。
我需要在某個時間使用用戶輸入的小時和分鐘執行任務。VB.net在計劃時間執行任務
我想的有點像使用某種循環,每一次它循環的,如果檢查Now().Hour
比賽HourChoice
和Now().Minute
匹配MinuteChoice
在此,我也有一個用戶選項,選擇「 AM「或」PM「,如果是TimeOfDay = "PM"
,則加12小時(Now().Hour
是軍事時間)。
編輯:我只希望這個運行一次,而不是每一天。
您不必循環,
只需將一個計時器添加到表單中,將其間隔設置爲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
我會創建一個計時器,並將其刻度設置爲給定時間等待毫秒。當定時器被調用時,你停止定時器。 –
這是一個更好的方法@DavidSdot –
我如何啓用它並設置計時器? – user2620851
你可以使用一個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)
然後你只需要一個子做你的任務:
Public Sub DoStuff(obj As Object)
'...Do Some Kind of Work
End Sub
你能舉個例子嗎? – user2620851
更新了例子。你不得不原諒我的VB我有點生疏...... – randcd
未經測試,但應該工作。在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()之間的差值(以毫秒爲單位),然後啓動計時器。
這是一個網絡應用程序,桌面應用程序,服務? – randcd
@randcd vb.net桌面應用程序 – user2620851
供參考:[使用VB.net創建計劃任務](https://stackoverflow.com/q/20677722/327083) –