2012-12-27 233 views
1

觸發一個事件我有一種情況,我想跟蹤如果我的控制檯應用程序是活的或死(因異常等)。在固定的時間間隔

雖然控制檯應用程序正在執行它的處理我想擁有它有一個計時器,不斷打電話每N分鐘後報告方法的機制,這種方法被稱爲更新數據庫時間戳。

所以:

1 - Console application starts 
2 - Reports time stamp 
3 - Keeps on doing its task (while in parallel it reports again after N seconds) 

我知道我可以產生一個線程,並使其睡眠狀態和「N」分鐘後再次醒來,但如何可靠的是,因爲線程可能不火,直到資源是免費的, 「N」可能分鐘不再有效,因爲該線程將觸發其自己的時間。

我怎樣才能確保報告中並行同時處理是怎麼回事的呢?

+0

你有正確的想法,你只需要確保N是明顯小於任何檢查它。例如,更新數據庫中的每一分鐘,但只檢查它每隔5分鐘,在最後5分鐘內沒有任何時間戳是有效的。 – Bobson

回答

6

而不是創建自己的線程中使用一個內置的定時器:

private DateTime startTime; 
    private System.Threading.Timer theTimer; 

啓動定時器:

  this.startTime = DateTime.Now; 
      TimerCallback callback = TimerTick; 
      this.theTimer = new System.Threading.Timer(callback, null, 0, 1000); 

回調方法:

void TimerTick(object stateInfo) 
    { 
     TimeSpan currentTime = DateTime.Now - startTime; 
     // Do your stuff here. 
    } 

這與創建一個計時器沒有任何延遲,每秒鐘都會發生。

MSDN page

第一個整數是dueTime量的時間被調用的回調方法之前延遲。指定零立即啓動計時器。

第二個整數是period - 即調用回調方法的時間間隔。

您需要確保在TimerTick中的處理時間少於您指定的時間段或確保它可以重新進入 - 即可以應對在前一次調用完成之前被調用。你如何做到這一點 - 或者你是否可以這樣做 - 取決於你的應用。

+0

正是我需要的!謝謝 ! –

相關問題