我尝试在常用表单上使用标签放置消息。关于下面的代码,我想看看我想要的所有消息,但是我看到Sleep()之后的消息。
lbStatus.Content = "Synchronizing Customers";
Thread.Sleep(1000);
lbStatus.Content = "Synchronizing Estimates";
<Label Content="" Height="28" Name="lbStatus" Margin="159,60,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="207" FontSize="12" Visibility="Hidden" Foreground="Blue"/>
感谢。
答案 0 :(得分:2)
问题是你在UI线程上睡觉。
在第一行执行之后,你睡在UI线程上,但它是UI线程负责刷新UI (UI线程刷新Render调度程序优先级上的UI)。因此,您在第一行执行后看不到更新,因为UI线程永远不会有时间执行在调度程序上排队的渲染优先级项。
理想情况下,您应该使用DispatcherTimer在UI线程上等待一段时间,然后在间隔时间过后再更新。
然而,快速而肮脏的解决方案是在您调用它之前将Dispatcher优先级设置为Render 的UI线程上调度空委托,以便在线程处于睡眠状态之前执行UI刷新部分
lbStatus.Content = "Synchronizing Customers";
lbStatus.Dispatcher.Invoke((Action)(() => { }), DispatcherPriority.Render);
Thread.Sleep(1000);
lbStatus.Content = "Synchronizing Estimates";
这里的想法是,一旦您在具有渲染优先级的UI调度程序上对空委托进行排队,它将执行优先级高于或等于渲染的所有待处理项。因为,在渲染优先级上完成UI刷新,UI将被刷新。