C# WPF中代码的奇怪行为(呈现问题)

C# WPF中代码的奇怪行为(呈现问题),c#,.net,wpf,resources,rendering,C#,.net,Wpf,Resources,Rendering,我是一个WPF应用程序,在窗口的代码隐藏文件中有以下按钮单击事件处理程序: private void AddNewRecBtn_Click(object sender, RoutedEventArgs e) { DimRec.Visibility = System.Windows.Visibility.Visible; PrBarLayer.Visibility = System.Windows.Visibility.Visible;

我是一个WPF应用程序,在窗口的代码隐藏文件中有以下按钮单击事件处理程序:

   private void AddNewRecBtn_Click(object sender, RoutedEventArgs e)
    {
            DimRec.Visibility = System.Windows.Visibility.Visible;
            PrBarLayer.Visibility = System.Windows.Visibility.Visible;
            try
            {
                WriteAndClose();
            }
            catch (Exception)
            {
                throw;
            }
    }
这些代码行:

        DimRec.Visibility = System.Windows.Visibility.Visible;
        PrBarLayer.Visibility = System.Windows.Visibility.Visible;    
只需在显示ProgressBar和StackPanel
PrBarLayer
的过程中,使一个带有
Opacity=“0.5”Fill=“Gray”
的矩形变得可见,以使窗口变暗。
WriteAndClose()方法执行很多事情,包括LINQ到SQL查询和屏幕上的大量可视化,这需要几秒钟的时间(当它进行时,屏幕上没有任何事情发生,一切似乎都冻结了)

在这几秒钟的时间里,我想向用户展示一个暗显的窗口控件和一个动画的进度条,但问题是这些层(代码使其可见)实际上没有出现。如果我删除
WriteAndClose()方法,一切正常-ProgressBar可见

似乎WPF不会一次直观地呈现控件,然后资源被带到下一个方法
WriteAndClose
,所有内容都会冻结,然后在所有操作都已完成且进度条层的可见性已折叠时,屏幕会被渲染


解决办法是什么?如何让ProgressBar先显示,然后再执行剩余的繁重任务?

您必须将WriteAndClose的执行移动到另一个线程


但是,您只能使用[Control.]Dispatcher.BeginInvoke操作UI。

您必须将WriteAndClose的执行移动到其他线程

但是,您只能使用[Control.]Dispatcher.BeginInvoke操作UI