2013-04-03 91 views
1

我有一個運行每隔五分鐘,然後睡覺的過程。我想知道當時間是晚上11:45到午夜的時候,是否有一種優雅的方式來做某些事情(任何事情)。做一些在特定時間在.NET

我的第一反應是得到一個做類似這樣的東西...

public bool isItMidNight() { 
     return ((DateTime.UtcNow.Hour > 11:54) && DateTime.UtcNow.Hour < 11.59);    
    } 

如果該值計算結果爲真,那麼做一些事情。如果沒有,繼續睡覺並醒來聯繫 只是psuedo代碼BTW。我認爲這不會達到產量。但那是我的想法。是否有更多的* 強文 *優雅的解決方案

+3

我覺得這裏最好的辦法是與計劃的任務,有你想要一個控制檯應用程序中運行代碼。 – JMK

回答

6

不知道它是否符合「優雅」,但Quartz.NET肯定是「企業」。

2

留出時間管理的機制,以最適合它的地方 - 我建議使用Windows Task Scheduler

讓它晚上11:45觸發您的應用程序,然後你的應用程序可以專注於自己的任務,而不必擔心時間和是否該應用程序的另一個實例已經回升並運行與任務等。

+0

這是我考慮過的事情。但我試圖將這項任務的運動部分保持在最低限度。而且由於我是新的,這個線程每隔幾分鐘就會睡覺並醒來,所以我想知道是否有一種方法可以利用它。 – SoftwareSavant

+1

@DmainEvent用互斥鎖/信號一起,以確保有且僅有一個過程對於一個給定的一天拉開序幕,你還必須確保你有一個進程在時間做它的事活着。您是否定義了一種機制來確保您的流程每天在11:45和午夜之間運行?它會適當地處理崩潰和機器重啓嗎?計劃任務隱式處理所有這些問題。 – 48klocs

+0

將會有一個過程運行,以確保這件事情開始。該線程每5分鐘旋轉一次該線程。我再次想到了使用計劃任務,但是這個過程已經到位,我想我也可以使用它。 – SoftwareSavant

2

您可以使用Timer類,像這樣一個:

new System.Threading.Timer(myScheduledTask, null, new TimeSpan(hh, mm, ss) - DateTime.Now.TimeOfDay, -1); 
+0

現在就是我說的。 – SoftwareSavant

+0

現在我已經查看了一些代碼,但我不確定如何解決我的特定問題。我不一定想要倒數。我的線程每5分鐘醒來一次。在5分鐘的間隔裏醒來的那一天,我想要做點什麼。上面的代碼如何幫助我做到這一點? – SoftwareSavant

+0

好吧,你的意思是你想安排將現有線程喚醒到特定時間嗎?其他時間你真的需要這個單獨的線程嗎?爲什麼不使用定時器代替線程 - 它可能接受狀態對象.. – Lanorkin

相關問題