0

我确信这可能已经在某个地方得到了答案,但我已经在网上搜索了所有内容,但找不到明显的解决方案?

private void button5_Click(object sender, RoutedEventArgs e)
{
    if (stopwatch.IsRunning == false)
    {
        stopwatch.Start();

        while (stopwatch.IsRunning == true)
        {
            label7.Content = stopwatch.Elapsed.ToString();
            Thread.Sleep(1000);
        }
    }
}

label7 没有更新,我假设它是因为 while 循环永远不会退出?

但我也没有高兴地尝试过这个?

private void button5_Click(object sender, RoutedEventArgs e)
{
    if (stopwatch.IsRunning == false)
    {
        stopwatch.Start();
    }

    label7.Content = stopwatch.Elapsed.ToString();
    Thread.Sleep(1000);

    button5_Click(sender, e);
}
4

2 回答 2

2

你不想在那里做一个 Thread.Sleep(1000) 。这将使 UI 无法自行更新。相反,使用计时器,当计时器滴答事件触发时,更改标签中的文本。

因此,对于您的示例,当您定义秒表时,定义其间隔,然后为“Tick”事件添加事件处理程序。当它“打勾”时,设置标签的内容。

使用 DispatcherTimer 这样您就不必切换到 UI 线程,因为您的计时器将为您在 UI 线程中工作。

于 2013-07-15T21:52:12.430 回答
0

由于您正在创建一个计时器类,因此您应该使用 Timer Elapsed 事件。在那里更新你的用户界面。

MSDN Timer Elapsed 事件说明

如前所述,休眠您的进程线程将实质上冻结应用程序。如果可以的话,通常避免它,除非你有一个非常具体的理由让线程休眠。1秒对于一台电脑来说也是永恒的,所以你经过的时间增量应该比较小。用户会注意到 1 秒,他们将更难注意到 0.1 秒或更少的增量。

于 2013-07-15T21:51:05.707 回答