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);
}
你不想做Thread.Sleep(1000)在那里。这将使UI无法自我更新。相反,使用计时器,当计时器滴答事件触发时,更改标签中的文本。
因此,对于您的示例,当您定义秒表时,定义其间隔,然后为"Tick"事件添加一个事件处理程序。当它"勾选"时,设置标签的内容。
使用DispatcherTimer,这样您就不必切换到UI线程,因为您的计时器将在UI线程中为您工作。
由于您正在创建计时器类,因此应该使用timer Elapsed事件。在那里更新您的UI。
MSDN计时器运行事件描述
如前所述,睡眠进程线程将从根本上冻结应用程序。如果可以的话,通常会避免它,除非你有一个非常具体的理由来睡眠线程。1秒对电脑来说也是永恒的,所以你的运行时间增量应该相对较小。用户将在1秒内注意到,他们将有一个更难的时间通知增量为.1秒及以下。