2013-07-31 186 views
0

我需要在某個時間使用用戶輸入的小時和分鐘執行任務。VB.net在計劃時間執行任務

我想的有點像使用某種循環,每一次它循環的,如果檢查Now().Hour比賽HourChoiceNow().Minute匹配MinuteChoice

在此,我也有一個用戶選項,選擇「 AM「或」PM「,如果是TimeOfDay = "PM",則加12小時(Now().Hour是軍事時間)。

編輯:我只希望這個運行一次,而不是每一天。

+0

這是一個網絡應用程序,桌面應用程序,服務? – randcd

+0

@randcd vb.net桌面應用程序 – user2620851

+0

供參考:[使用VB.net創建計劃任務](https://stackoverflow.com/q/20677722/327083) –

回答

0

您不必循環,
只需將一個計時器添加到表單中,將其間隔設置爲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

這是一個更好的方法@DavidSdot –

+0

我如何啓用它並設置計時器? – user2620851

1

你可以使用一個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 
+0

你能舉個例子嗎? – user2620851

+0

更新了例子。你不得不原諒我的VB我有點生疏...... – randcd

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

0

有點晚了一個答案到這個問題被發現,但:您可以使用標準System.Windows.Forms.Timer。將時間間隔設置爲所需時間與Now()之間的差值(以毫秒爲單位),然後啓動計時器。