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

时间:2012-05-29 15:10:08

标签: c# .net multithreading timer

我是C#的新手,我正在开发一个需要多个计时器的程序。

我想知道当程序运行CPU密集型代码时,是否有办法在程序中同时暂停所有计时器?

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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));
}

答案 2 :(得分:0)

.NET框架中无法获取所有正在运行的Threading.Timer实例的列表。但是你可以创建自己的Timer包装器,将所有正在运行的计时器添加到列表中,当然也可以在计时器结束时将它们删除。

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