c#WPF中的循环方法

本文关键字:方法 循环 c#WPF | 更新日期: 2023-09-27 18:22:31

我确信这可能在某个地方得到了答案,但我在网上搜索了很多,却找不到明显的解决方案?

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);
}

c#WPF中的循环方法

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

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

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

由于您正在创建计时器类,因此应该使用timer Elapsed事件。在那里更新您的UI。

MSDN计时器运行事件描述

如前所述,睡眠进程线程将从根本上冻结应用程序。如果可以的话,通常会避免它,除非你有一个非常具体的理由来睡眠线程。1秒对电脑来说也是永恒的,所以你的运行时间增量应该相对较小。用户将在1秒内注意到,他们将有一个更难的时间通知增量为.1秒及以下。