【发布时间】:2012-05-13 21:51:12
【问题描述】:
我正在使用 WPF 开发一个非常简单的秒表,但使用 System.Diagnostics 秒表非常慢而且根本不可靠,相比之下,我的应用程序每 1 秒的系统时钟在实际时钟上是 3 秒。
我做了一些关于秒表慢的搜索,找到了很多结果但没有解决办法,所以我决定想出自己的计数器。
这是我想出的一个示例:
System.Windows.Threading.DispatcherTimer _update;
DateTime _started;
bool isRunning = false;
更新线程:
_update = new System.Windows.Threading.DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), System.Windows.Threading.DispatcherPriority.Normal, delegate
{
if (isRunning)
iTimer.Content = new DateTime((DateTime.Now - _started).Ticks).ToString("HH:mm:ss");
}, this.Dispatcher);
我有 2 个按钮,bToggle 负责启动、停止和恢复它,另一个按钮称为 bReset。
private void bReset_Click(object sender, RoutedEventArgs e)
{
isRunning = false;
iTimer.Content = "00:00:00";
bToggle.Content = "Start";
}
private void bToggle_Click(object sender, RoutedEventArgs e)
{
if ((string)bToggle.Content == "Start")
{
isRunning = true;
_started = DateTime.Now;
bToggle.Content = "Stop";
}
else if ((string)bToggle.Content == "Resume")
{
isRunning = true;
bToggle.Content = "Stop";
}
else
{
isRunning = false;
bToggle.Content = "Resume";
}
}
它可以正常启动和重置,但由于我使用的是实际时间,如果我停止和恢复,它会跳秒直到实际时间。
我该如何解决这个问题,或者是否有替代秒表的替代品,实际上对当前时间有很好的准确性?
【问题讨论】:
-
你用
StopWatch做什么? -
对于秒表?简单地说,它从 0 开始计数,直到你停止或重置。
-
听起来你正试图将它用作计时器。
-
类似 sport-impianti.com/wp-content/gallery/atletica/4103.jpg 的东西,但作为桌面应用程序。无论哪种方式,如果您查看上面的代码,它已经完全正常工作,我只需要弄清楚如何执行停止/恢复功能,或者是否有更好的方法来控制它。
-
StopWatch在某些硬件上存在问题(例如内核之间的恒定偏移),但我从未听说过乘法错误。你能发布你的StopWatch代码吗?