我是C#的新手,我正在開發一個需要多個定時器的程序。有沒有辦法暫停所有Threading.Timer定時器?
我想知道是否有一種方法可以在程序運行CPU密集型代碼時同時暫停程序中的所有計時器?
目前,當前啓用的定時器會嘗試趕上集中操作期間引發的所有定時器事件。
我是C#的新手,我正在開發一個需要多個定時器的程序。有沒有辦法暫停所有Threading.Timer定時器?
我想知道是否有一種方法可以在程序運行CPU密集型代碼時同時暫停程序中的所有計時器?
目前,當前啓用的定時器會嘗試趕上集中操作期間引發的所有定時器事件。
我認爲您可以創建這些定時器的列表(當您激活它們時)並手動禁用這些定時器(使用Timer.Change方法)。
.NET框架無法獲取所有正在運行的Threading.Timer實例的列表。但是你可以創建你自己的定時器包裝器,它將所有運行定時器添加到列表中,並在定時器完成時將其刪除。
如果您只想確保您的方法僅在CPU空閒時執行,您可以將計時器的線程優先級設置爲較低的值。
如何將線程優先級設置爲Threading.Timer定時器? –
您需要跟蹤您在列表中創建的所有計時器,並在您不希望它們運行時調用更改方法。
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));
}
我強烈建議編寫它包裝一個計時器,並在內部有一個單一的記號事件(不停止),但出版自己的Tick事件,維護訂戶名單公佈蜱代理類。然後,您可以添加在外部事件處理程序上掛起/恢復更新的功能。 –