我是 C# 新手,我正在开发一个需要多个计时器的程序。
我想知道当程序运行 CPU 密集型代码时,是否有办法同时暂停程序中的所有计时器?
目前,当前启用的计时器试图赶上在密集操作期间引发的所有计时器事件。
我是 C# 新手,我正在开发一个需要多个计时器的程序。
我想知道当程序运行 CPU 密集型代码时,是否有办法同时暂停程序中的所有计时器?
目前,当前启用的计时器试图赶上在密集操作期间引发的所有计时器事件。
我认为您可以创建这些计时器的列表(当您激活它们时)并手动禁用这些计时器(使用Timer.Change方法)。
您将需要跟踪您在列表中创建的所有计时器,并在您不希望它们运行时调用 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));
}
.NET 框架中无法获取所有正在运行的 Threading.Timer 实例的列表。但是您可以创建自己的 Timer 包装器,将所有正在运行的计时器添加到列表中,当然当计时器完成时将它们删除。
如果您只想确保您的方法仅在 CPU 空闲时执行,您可以将计时器的线程优先级设置为较低的值。