在Thread.sleep执行之前更新wpf元素

时间:2012-03-13 15:34:04

标签: wpf multithreading

我想知道如何在执行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,这是最高优先级

我想我错过了一些重要的概念。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以强制WPF处理其队列中的所有项目,方法是向Dispatcher调用一个项目,该项目的优先级低于或等于您要执行的任务。只需传递一个空委托作为动作,就像这样。

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { }));

这将有效;但是这样做不应该是#34;正常",我很好奇为什么你需要睡觉你的主UI线程...你上面显示的代码是可怕的,但我不知道大局,所以也许有理由这样做?