有没有办法暂停所有Threading.Timer定时器?

问题描述:

我是C#的新手,我正在开发一个需要多个定时器的程序。有没有办法暂停所有Threading.Timer定时器?

我想知道是否有一种方法可以在程序运行CPU密集型代码时同时暂停程序中的所有计时器?

目前,当前启用的定时器会尝试赶上集中操作期间引发的所有定时器事件。

+0

我强烈建议编写它包装一个计时器,并在内部有一个单一的记号事件(不停止),但出版自己的Tick事件,维护订户名单公布蜱代理类。然后,您可以添加在外部事件处理程序上挂起/恢复更新的功能。 –

我认为您可以创建这些定时器的列表(当您激活它们时)并手动禁用这些定时器(使用Timer.Change方法)。

.NET框架无法获取所有正在运行的Threading.Timer实例的列表。但是你可以创建你自己的定时器包装器,它将所有运行定时器添加到列表中,并在定时器完成时将其删除。

如果您只想确保您的方法仅在CPU空闲时执行,您可以将计时器的线程优先级设置为较低的值。

+0

如何将线程优先级设置为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)); 
}