虽然@ EBrown的答案已经告诉你如何使用毫秒用DispatcherTimer
,其精度是假想约15-20毫秒,错误加起来在每次迭代,这使得它有点不切实际。
但是可以通过在同一时间为DispatcherTimer
开始System.Diagnostics.StopWatch
,并用更小的时间步检查Tick事件里面的StopWatch.ElapsedMilliseconds
来解决这个问题,这似乎给更精确的结果。它也适用于System.Timers.Timer
。
下面是一个基于WPF程序的简短示例。
private void StartTimers(object sender, RoutedEventArgs e)
{
dtimer = new DispatcherTimer();
dtimer.Tick += new EventHandler(dTimer_Tick);
dtimer.Interval = TimeSpan.FromMilliseconds(1); // the small time step
stopWatch = new StopWatch();
dTimer.Start();
stopWatch.Start();
}
private void dTimer_Tick(object sender, EventArgs e)
{
currentTime = stopWatch.ElapsedMilliseconds;
if (currentTime - oldTime > interval)
{
oldTime = currentTime;
DoStuff();
}
}
在Tick事件使用StopWatch.Restart
做迭代都会有同样的错误问题DispatchTimer
的原因,因为它会在DispatchTimer事件被触发重新启动。
'TimeSpan'具有一个需要几毫秒的构造函数:[见MSDN](https://msdn.microsoft.com/en-us/library/6c7z43tw(v = vs.110).aspx)。基本上,使用'新的时间跨度(0,0,0,0,毫秒);' –
@EBrown绝对张贴这是一个aswer我认为 – Pseudonym