加载主窗口时,wpf启动画面滞后

时间:2014-06-26 05:16:41

标签: c# wpf backgroundworker

我正在做一些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();
}

以上代码正常运作。但是惹人喜爱的事情是滞后的。

1 个答案:

答案 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在关闭启动画面之前。