我正在做一些WPF应用程序,今天我遇到了一些麻烦。我需要在初始化MainWindow时显示启动画面。我的代码如下:
public MainWindowView()
{
OnLoad();
}
public void OnLoad()
{
worker = new BackgroundWorker();
lw = new WaitWindowView();
lw.Show();
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
Dispatcher.Invoke(new Action(delegate()
{
InitializeComponent();
DataContext = new NavBarVM();
}), DispatcherPriority.Background);
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
lw.Close();
};
worker.RunWorkerAsync();
}
以上代码正常运作。但是惹人喜爱的事情是滞后的。
答案 0 :(得分:2)
您对Dispatcher.Invoke
的调用将使DoWork
处理程序中的代码在UI线程上运行,因此使用BackgroundThread
这样的代码毫无意义。此外,您也无法在后台线程上调用InitializeComponent
,因此不会加快速度。
显示启动画面的常规方法可以在我对How to open a child Window like a splash screen before MainWindow in WPF?问题的回答中找到,此处为Stack Overflow。如果你有很多初始化代码(你,而不是框架),那么你可以在启动画面Window
中执行此操作,并将加载的对象传递回MainWindow
在关闭启动画面之前。