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()
将冻结您的应用程序。您需要使用分派器
,或者将代码放入任务
或其他东西中。第二个也是一个无止境的循环。你想干什么?