2

(使用 WPF)

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

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

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

DispatcherTimer如果我像上面那样使用它,是否由于某种原因并不总是正好 1 秒?

4

2 回答 2

6

像这样的计时器永远不会绝对准确。毕竟,它必须在调度程序线程上运行——如果调度程序同时忙于处理其他线程,你会期望发生什么?

它可能足够接近以每秒大约一次可见Stopwatch的滴答声 - 您应该只取当前时间并从“目标”时间中减去它(或使用 a )以获得相当准确的倒计时,而不是仅仅计数计时器计时的次数。

于 2012-06-12T05:47:05.850 回答
4

MSDN 指出(关于DispatcherTimer

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

对于每个Tick事件,计时器将关闭不确定的时间。1 小时(3600 滴答声),这将加起来。如果您将计时器间隔设置为 1 小时,我希望错误会少得多(尽管理论上,调度程序在一个滴答声中可能非常忙,以至于错误仍然大于另一种情况)。

于 2012-06-12T05:54:21.643 回答