间隔0,0,1的DispatcherTimer不是1秒?

时间:2012-06-12 05:37:50

标签: c# wpf dispatchertimer

(使用WPF)

在我写的一个小应用程序中,我使用了一些倒计时器。 为此,我使用了DispatcherTimer

counter01 = new DispatcherTimer();
counter01.Tick += new EventHandler(counter01_Tick);
counter01.Interval = new TimeSpan(0, 0, 1);

但是现在当我测试/使用该程序时,我注意到当它被设置为(例如)60分钟倒计时时,与现实世界时间相比,它会缩短几分钟。

可能是因为某些原因DispatcherTimer如果我像上面那样使用它,并不总是1秒?

2 个答案:

答案 0 :(得分:6)

这样的计时器永远不会完全准确。毕竟,它必须在调度程序线程上运行 - 如果调度程序正忙于同时处理其他某个线程,您会发生什么?

它可能足够接近明显每秒钟大约一次 - 你应该只花费当前时间并从“目标”时间中减去它(或使用{{1} })获得一个相当准确的倒计时,而不是只计算计时器勾选的次数。

答案 1 :(得分:4)

MSDN声明(关于DispatcherTimer

  

定时器不能保证在时间间隔发生时准确执行,但保证在时间间隔发生之前不执行。

对于每个Tick事件,计时器将在不确定的时间内关闭。 1小时(3600滴),这将加起来。如果你将定时器间隔设置为1小时,我希望错误要小得多(虽然理论上,调度程序可能如此忙碌在那个错误中仍然更大比另一种情况)。