c#dispatcher timer和System.TImers.Timer过早发射

时间:2012-10-31 00:59:38

标签: c# timer dispatchertimer

我在msdn上看到虽然计时器无法保证以确切的间隔(在我的情况下为1秒)发射,但它们不会在间隔之前触发

一台计算机上的计时器工作正常(Windows 7),而另一台计算机上的计时器(Windows Server 2003)每隔0.99999936 seconds触发一次。

我真的很感兴趣为什么会这样。

我注意到了这一点,因为我的代码计算时间为newSeconds = newSeconds + delta.SecondsdeltaDateTime.Now - lastTime

的位置

秒部分在Windows 7上显示1,在Windows Server 2003上显示0

解决方案只是阅读totalseconds,但我仍然想知道为什么它之前会被解雇。

任何人都可以详细说明这个吗?

修改

我实际上是在两个不同的Windows 2003上发生的。 我想知道更深入到这些区域是否有区别,是.net框架4与7对2003不同?或者人们可能知道的任何其他偏差?如何实现定时器,这可能是与硬件相关的问题吗?

与此相反: C# timer getting fired before their interval time 我每次都会发生这种情况。无需长时间运行。 感谢

修改

public void OnTick(object sender, EventArgs e)
{
    var delta = DateTime.Now - _lastTime;

    DoStuff

    _lastTime = DateTime.Now
}

2 个答案:

答案 0 :(得分:0)

这一行:

newSeconds = newSeconds + delta.Seconds

可能并且可能会越来越远离真正的衡量标准。想象一下,用一个标尺测量1英里:你最终会离开。

实际时间差异可能是事件发生之间和您抓住时间之间的少量时间的结果。这两点之间必须有几个CPU周期。

答案 1 :(得分:0)

我建议你使用反应式扩展。请阅读此blog帖子中的“这是时间关系”一章。