2012-11-29 60 views
6

這是一個相當簡單的問題,但每次我嘗試找到答案時,它都會一直顯示有關Windows計劃任務的事情,而這不是這樣。計劃在特定時間運行方法。

說我的程序基本上是這樣的:

void StartDoingThings() 
{ 
    //At Specific System.DateTime 
    DoSomething() 

    //At another specific System.Datetime 
    DoSomethingElse() 
} 

我怎麼把這些意見,而不是造成這些方法在不同的日期時間運行。我可以使用Thread.Sleep()甚至System.Threading.Timers並基於(DateTimeOfEvent - DateTime.Now)計算間隔,但是有簡單的話要說(假設程序仍在運行):At上午9:30:00在11/30/2012,執行DoAnotherThing()方法?

+3

有一個名爲quartznet的框架,請看看它。 http://quartznet.sourceforge.net/ –

+4

您繼續看到計劃任務的原因是因爲這正是它的設計目的。按計劃運行任務。每個任務都可以根據自己的操作調度每個任務,並讓調度程序管理何時執行。 –

+0

這是我的理解(這可能是不正確的),Windows任務計劃是,「在X時間,運行這個程序」,然後可能做這個程序。我沒有運行另一個程序,我只想在當前程序內部等待一段時間。如果我不正確,肯定幫助我理解,但根據我的理解,Windows任務計劃程序不會幫助我在特定時間運行已運行程序的特定部分。 – Xantham

回答

4

如果您想「安排」某種方法在預定時間執行某些操作,有多種方法可以實現。我不會使用Thread.Sleep(),因爲那會佔用一個無所事事的線程,這是浪費資源。

通常的做法是使用輪詢方法,按定期計時(例如每分鐘一次)喚醒並查看要執行的任務的共享列表。 System.Timer可用於輪詢方法:

aTimer = new System.Timers.Timer(10000); 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 

的OnTimedEvent方法可以包含維護的「任務」來執行的集合的代碼。當一個任務的時間到來時,Timer的下一次運行將導致它執行。

+0

因此,沒有什麼內置的,只會給一個dateTime對象嗎?它看起來像是一件普通的事情,就像在某個DateTime中做某件事一樣。我的程序中的某些任務可能會在它們之間延遲幾秒鐘,最多幾個小時,並且顯然會告訴它檢查每個事件其次會消耗超過必要的資源。 – Xantham

+0

我假設它沒有內置的原因是系統時間可能會改變,導致錯誤的假設(從未「關閉」的時間表) –

+0

這確實是有道理的,但我想我只是假設這是改變的風險您的系統時間,同時執行定時任務。如果它只是一個時間同步更改,那麼我會認爲他們會有一個if(time> set_time)來運行它,而不是等待確切的時間(可能會在時間同步期間跳過)。 – Xantham