Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中的c#循环方法_C#_Wpf_Stopwatch - Fatal编程技术网

WPF中的c#循环方法

WPF中的c#循环方法,c#,wpf,stopwatch,C#,Wpf,Stopwatch,我相信这可能是某个地方的答案,但我已经在网上搜索过了,找不到一个明显的解决方案 private void button5_Click(object sender, RoutedEventArgs e) { if (stopwatch.IsRunning == false) { stopwatch.Start(); while (stopwatch.IsRunning == true) { label7.Co

我相信这可能是某个地方的答案,但我已经在网上搜索过了,找不到一个明显的解决方案

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

因为您正在创建一个计时器类,所以应该使用timer Expressed事件。在那里更新你的用户界面


如前所述,休眠进程线程实质上会冻结应用程序。除非你有特别的理由睡在一根线上,否则如果可以的话,一般都要避免。对于计算机来说,1秒也是一个永恒的时间,所以你所用的时间增量应该相对较小。用户将注意到1秒,他们将有一个更困难的时间,注意增量为.1秒或更少。

您不想在那里执行线程。睡眠(1000)。这将使UI无法自我更新。相反,请使用计时器,当计时器勾号事件触发时,更改标签中的文本

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


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

在UI线程中执行
thread.Sleep()
将冻结您的应用程序。您需要使用
分派器
,或者将代码放入
任务
或其他东西中。第二个也是一个无止境的循环。你想干什么?