ETA:使用 Environment.TickCount 不会出现同样的问题。
ETA2:我应该补充一点,我实际上并没有在我的应用程序中使用 Forms.Timer - 因为这会否定高频计时器的使用。我在这里使用它来简化代码。
ETA3:我在下面发布了一个解决方法作为答案。
我在一台装有 XP 的笔记本电脑上观察到的 StopWatch 类有问题,但在另一台装有 Win7 的笔记本电脑上却没有。这是测试代码:
Public Class FormTest
Inherits Form
Private WithEvents Timer1 As System.Windows.Forms.Timer = New System.Windows.Forms.Timer
Private sw As Stopwatch = New Stopwatch
Public Sub New()
Me.Timer1.Interval = 1
End Sub
Protected Overrides Sub OnClick(ByVal e As System.EventArgs)
MyBase.OnClick(e)
Me.sw.Start()
Me.Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Text = sw.ElapsedMilliseconds.ToString
Me.Update()
End Sub
End Class
在 Windows 7 上,每秒检查经过的毫秒数,我得到类似:0、1010、2030、3005 ...
在 XP 上,我得到类似:0、200、306、390、512、...
也就是说,它是遥不可及的。我们不是在谈论毫秒。这与计时器是否为高分辨率无关,因为报告为真。据我所知,这与处理器亲和力无关,因为我尝试将其设置为 2 个处理器中的每一个。
正如我所说,我认为这与 XP 有关,但也可能与不同的内核有关——然而,两台笔记本电脑都是英特尔的。