2012-05-29 126 views
2

我是C#的新手,我正在開發一個需要多個定時器的程序。有沒有辦法暫停所有Threading.Timer定時器?

我想知道是否有一種方法可以在程序運行CPU密集型代碼時同時暫停程序中的所有計時器?

目前,當前啓用的定時器會嘗試趕上集中操作期間引發的所有定時器事件。

+0

我強烈建議編寫它包裝一個計時器,並在內部有一個單一的記號事件(不停止),但出版自己的Tick事件,維護訂戶名單公佈蜱代理類。然後,您可以添加在外部事件處理程序上掛起/恢復更新的功能。 –

回答

2

我認爲您可以創建這些定時器的列表(當您激活它們時)並手動禁用這些定時器(使用Timer.Change方法)。

0

.NET框架無法獲取所有正在運行的Threading.Timer實例的列表。但是你可以創建你自己的定時器包裝器,它將所有運行定時器添加到列表中,並在定時器完成時將其刪除。

如果您只想確保您的方法僅在CPU空閒時執行,您可以將計時器的線程優先級設置爲較低的值。

+0

如何將線程優先級設置爲Threading.Timer定時器? –

1

您需要跟蹤您在列表中創建的所有計時器,並在您不希望它們運行時調用更改方法。

List<System.Threading.Timer> TimerList = new List<System.Threading.Timer>(); 

    Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250); 
    Timer responseTimer = new Timer(tcb, autoEvent, 1000, 250); 

    TimerList.add(stateTimer); 
    TimerList.add(responseTimer); 

foreach (System.Threading.Timer t in TimerList) 
{ 
    T.Change(TimeSpan(0), new(TimeSpan(0)); 
} 
相關問題