需要初始化大约1000个定时器。每个计时器都必须处理自己的方法,参数中的方法粗略地说就是一个 ID。每个计时器的生命周期与方法定义的一样多。但是这个方法是一个 tick 的事实还有另一个障碍,它必须确定它属于哪个计时器并在方法体的持续时间内停止。
允许方法:
public void TimerTick(GUID id)
{
//тут кое какой код
if(TaskHasNextStep(id))
дать таймеру делей и опять зайти в данный метод
else
иначе убивать таймер
}
要将 ID 传递给处理程序,您需要使用用户状态(which
System.Threading.Timer),或者简单地将其打包到 lambda 中(总是有效)。例子:
(不要忘记在你的程序中调用你不再需要的定时器
Dispose!)程序输出:
因此,从状态转移(id)的角度来看,使用哪个计时器没有区别,lambdas 将拉动一切。
在重启定时器方面:重启y
System.Timers.Timer可以设置为t1.Enabled = true;,y可以设置System.Threading.Timer为t2.Change(400, System.Threading.Timeout.Infinite);。因此,同样,两个定时器是等价的。不同之处:
System.Threading.Timercallback只有一个,在构造函数中设置,不能取消,callbackSystem.Timers.Timer有一个事件Elapsed,可以随时订阅和取消订阅;System.Threading.Timer始终在线程池上执行回调,并且可以使用 将Elapsedy事件System.Timers.Timer强制转换为 WinForms UI 线程SynchronizingObject。使用 WPF 就更难了,Dispatcher因为它没有实现ISynchronizeInvoke,你必须编写一个适配器或插入一块 WinForms。System.Timers.Timer仅在 .NET Framework 下可用,在 .NET Core 或 UWP 下不可用。使用您最喜欢的界面。