Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载主窗口时wpf溅屏滞后_C#_Wpf_Backgroundworker - Fatal编程技术网

C# 加载主窗口时wpf溅屏滞后

C# 加载主窗口时wpf溅屏滞后,c#,wpf,backgroundworker,C#,Wpf,Backgroundworker,我正在做一些WPF应用程序,今天我遇到了一些麻烦。我需要在初始化主窗口时显示启动屏幕。我的代码如下: public MainWindowView() { OnLoad(); } public void OnLoad() { worker = new BackgroundWorker(); lw = new WaitWindowView(); lw.Show(); worker.DoWork += delegate(object s, DoWorkEven

我正在做一些WPF应用程序,今天我遇到了一些麻烦。我需要在初始化主窗口时显示启动屏幕。我的代码如下:

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();
}

以上代码正在运行。但是splash screes是滞后的。

您对
Dispatcher.Invoke的调用将使
DoWork
处理程序中的代码在UI线程上运行,因此像这样使用
BackgroundThread
是毫无意义的。此外,您也不能在后台线程上调用
InitializeComponent
,这样不会加快速度


显示启动屏幕的正常方式可以在我对问题的回答中找到,这里是关于堆栈溢出的。如果您有很多初始化代码(您,而不是框架),那么您可以在启动屏幕
窗口中执行此操作,并在关闭启动屏幕之前将加载的对象传递回
主窗口

延迟是指控件(按钮/任何东西)不响应鼠标输入吗?或者启动屏幕内有动画?启动屏幕内的动画比较滞后我认为主窗口和启动屏幕必须分开。在我的情况下,启动屏幕没有持续工作。小停再动画小停再动画等。