(使用WPF)
在我写的一个小应用程序中,我使用了一些倒计时器。
为此,我使用了DispatcherTimer
。
counter01 = new DispatcherTimer();
counter01.Tick += new EventHandler(counter01_Tick);
counter01.Interval = new TimeSpan(0, 0, 1);
但是现在当我测试/使用该程序时,我注意到当它被设置为(例如)60分钟倒计时时,与现实世界时间相比,它会缩短几分钟。
可能是因为某些原因DispatcherTimer
如果我像上面那样使用它,并不总是1秒?
答案 0 :(得分:6)
这样的计时器永远不会完全准确。毕竟,它必须在调度程序线程上运行 - 如果调度程序正忙于同时处理其他某个线程,您会发生什么?
它可能足够接近明显每秒钟大约一次 - 你应该只花费当前时间并从“目标”时间中减去它(或使用{{1} })获得一个相当准确的倒计时,而不是只计算计时器勾选的次数。
答案 1 :(得分:4)
MSDN声明(关于DispatcherTimer
)
定时器不能保证在时间间隔发生时准确执行,但保证在时间间隔发生之前不执行。
对于每个Tick
事件,计时器将在不确定的时间内关闭。 1小时(3600滴),这将加起来。如果你将定时器间隔设置为1小时,我希望错误要小得多(虽然理论上,调度程序可能如此忙碌在那个错误中仍然更大比另一种情况)。