2

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

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

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

4

3 回答 3

2

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

于 2012-05-29T15:13:30.887 回答
1

您将需要跟踪您在列表中创建的所有计时器,并在您不希望它们运行时调用 change 方法。

  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));
}
于 2012-05-29T15:24:29.603 回答
0

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

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

于 2012-05-29T15:22:23.530 回答