C# WPF中代码的奇怪行为(呈现问题)
我是一个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;
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和StackPanelPrBarLayer
的过程中,使一个带有Opacity=“0.5”Fill=“Gray”
的矩形变得可见,以使窗口变暗。
WriteAndClose()代码>方法执行很多事情,包括LINQ到SQL查询和屏幕上的大量可视化,这需要几秒钟的时间(当它进行时,屏幕上没有任何事情发生,一切似乎都冻结了)
在这几秒钟的时间里,我想向用户展示一个暗显的窗口控件和一个动画的进度条,但问题是这些层(代码使其可见)实际上没有出现。如果我删除WriteAndClose()代码>方法,一切正常-ProgressBar可见
似乎WPF不会一次直观地呈现控件,然后资源被带到下一个方法WriteAndClose
,所有内容都会冻结,然后在所有操作都已完成且进度条层的可见性已折叠时,屏幕会被渲染
解决办法是什么?如何让ProgressBar先显示,然后再执行剩余的繁重任务?您必须将WriteAndClose的执行移动到另一个线程
但是,您只能使用[Control.]Dispatcher.BeginInvoke操作UI。您必须将WriteAndClose的执行移动到其他线程
但是,您只能使用[Control.]Dispatcher.BeginInvoke操作UI