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

在执行Thread.sleep之前更新wpf元素,wpf,multithreading,Wpf,Multithreading,我想知道如何在执行Thread.sleep之前刷新wpf元素。在下面的场景中,首先执行Thread.sleep调用,然后更新wpf元素 我试过这个: 在按钮中单击事件处理程序: 编辑:为了理解我想要什么,我添加了一些变量赋值和注释 private void button_click(object sender, RoutedEventArgs e){ //fist of all, set the static variable to_change to true, then Upda

我想知道如何在执行Thread.sleep之前刷新wpf元素。在下面的场景中,首先执行Thread.sleep调用,然后更新wpf元素

我试过这个:

在按钮中单击事件处理程序:

编辑:为了理解我想要什么,我添加了一些变量赋值和注释

 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,它是最高优先级的

我想我遗漏了一些重要的概念


提前谢谢

您可以通过向调度程序调用优先级低于或等于要执行的任务的项目,强制WPF处理其队列中的所有项目。只需传递一个空委托作为操作,如下所示

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

这将起作用;然而,这样做不应该是正常的,我很好奇为什么你需要睡眠你的主UI线程。。。上面显示的代码很吓人,但我不知道全局,所以可能有原因吧?

永远不要在UI线程中睡觉。你想达到什么目的?@Clements我编辑了我的问题,以便更好地理解。如果你不明白我想做什么,请告诉我。@jberger如果你能解释你的观点,可能会很有用。@Ecacavelos 1st,什么是@clemens说的。第二,您正在切换布尔值。如果你有一些应该在点击中运行的长时间运行,那么通过LongRunningCode在问题中指出它;以更抽象的方式告诉我们,您正在尝试做什么,例如,用户单击一个按钮,我开始在后台下载一个文件,然后我想在文件完成后显示下载的文件。谢谢@davisoa。你说睡主线是不好的做法?。我想将一段时间内的静态变量设置为某个值,并在窗口的标签中显示消息。在这段时间之后,我想再次设置为旧值。然后为自己设置一个在这段时间之后滴答作响的Dispatchermer,并在滴答事件处理程序中重置该值。这就是我要寻找的@Robaticus。非常感谢@ecacavelo在主线程中睡眠是不好的做法的主要原因是UI在睡眠调用的整个时间内都完全没有响应。