秒表的替代品?

Gua*_*apo 6 c# wpf stopwatch

我正在使用 WPF 制作一个非常简单的秒表,但使用System.Diagnostics秒表非常慢而且根本不可靠,相比之下,我的应用程序每 1 秒的系统时钟在实际时钟上是 3 秒。

我做了一些关于秒表慢的搜索,找到了很多结果但没有解决方案,所以我决定想出我自己的计数器。

这是我想出的一个示例:

System.Windows.Threading.DispatcherTimer _update;
DateTime _started;
bool isRunning = false;
Run Code Online (Sandbox Code Playgroud)

更新线程:

_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);
Run Code Online (Sandbox Code Playgroud)

我有 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";
    }
}
Run Code Online (Sandbox Code Playgroud)

启动和重置工作正常,但由于我使用的是实际时间,如果我停止和恢复,它会跳秒到实际时间。

我该如何解决这个问题,或者是否有替代秒表的方法,它实际上对当前时间具有良好的准确性?

usr*_*usr 2

您需要引入一个附加变量,TimeSpan accumulatedTime每当有人单击“停止”时,您就可以在其中保存经过的时间间隔。

和:

iTimer.Content = (new DateTime((DateTime.Now - _started).Ticks) + accumulatedTime).ToString("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)