我想知道如何在执行Thread.sleep()之前刷新wpf元素。在下面的场景中,首先执行Thread.sleep()调用,然后更新wpf元素。
我试过了:
在button_click事件处理程序中:
编辑:为了理解我想要的东西,我添加了一些变量赋值和注释。
private void button_click(object sender, RoutedEventArgs e){
//fist of all, set the static variable to_change to true, then Update GUI label
to_change = true;
Thread thread = new Thread(UpdateGUI);
thread.Start();
//Then sleep 1 second and ( With label changed)
Thread.Sleep(1000);// one second
//and lately reset the value of to_change to false and update the GUI again
to_change = false;
//UpdateGUI.
}
在UpdateGUI中我有:
private void UpdateGUI()
{
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)delegate()
{
this.label_success.Content = "Successful!";
}
);
}
我也尝试使用DispatcherPriority.Send,这是最高优先级
我想我错过了一些重要的概念。
提前致谢!
答案 0 :(得分:0)
您可以强制WPF处理其队列中的所有项目,方法是向Dispatcher调用一个项目,该项目的优先级低于或等于您要执行的任务。只需传递一个空委托作为动作,就像这样。
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { }));
这将有效;但是这样做不应该是#34;正常",我很好奇为什么你需要睡觉你的主UI线程...你上面显示的代码是可怕的,但我不知道大局,所以也许有理由这样做?