WPF放置消息

时间:2014-04-06 20:06:04

标签: c# wpf

我尝试在常用表单上使用标签放置消息。关于下面的代码,我想看看我想要的所有消息,但是我看到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"/>

感谢。

1 个答案:

答案 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将被刷新。