有没有办法暂停所有Threading.Timer定时器?
问题描述:
我是C#的新手,我正在开发一个需要多个定时器的程序。有没有办法暂停所有Threading.Timer定时器?
我想知道是否有一种方法可以在程序运行CPU密集型代码时同时暂停程序中的所有计时器?
目前,当前启用的定时器会尝试赶上集中操作期间引发的所有定时器事件。
答
.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));
}
我强烈建议编写它包装一个计时器,并在内部有一个单一的记号事件(不停止),但出版自己的Tick事件,维护订户名单公布蜱代理类。然后,您可以添加在外部事件处理程序上挂起/恢复更新的功能。 –