1

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

一台电脑上的计时器工作正常(Windows 7),而另一台电脑(Windows Server 2003)上的每个0.99999936 seconds.

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

我注意到了这一点,因为我有代码计数秒到newSeconds = newSeconds + delta.Seconds Where deltaisDateTime.Now - lastTime

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

解决方案是 read totalseconds,但我仍然想知道为什么它之前会触发。

谁能详细说明这一点?

编辑

我实际上在两个不同的 Windows 2003 电脑上发生了这种情况。我想更深入地了解操作系统之间是否存在差异,.net framework 4 对于 7 和 2003 是否不同?或者人们可能知道的任何其他偏差?计时器是如何实现的,可能是硬件相关问题吗?

与此相反: C# 计时器在它们的间隔时间之前被触发, 我一直在发生它,在每个滴答声中。无需长时间运行。谢谢

编辑

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

    DoStuff

    _lastTime = DateTime.Now
}
4

2 回答 2

0

这一行:

newSeconds = newSeconds + delta.Seconds

可能而且可能会越来越远离真正的衡量标准。想象一下用尺子测量 1 英里:你最终会飘走。

实际的时间差异可能是事件触发与您获取时间之间的一小段时间的结果。在这两点之间必须有几个 CPU 周期。

于 2012-10-31T01:52:15.403 回答
0

我建议您使用响应式扩展。阅读这篇博文中的“时间到了”一章。

于 2012-10-31T01:59:19.107 回答