【问题标题】:wpf splash screen lagging while loading main window加载主窗口时wpf启动画面滞后
【发布时间】:2014-06-26 05:16:40
【问题描述】:

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

上面的代码正在运行。但飞溅碎石滞后。

【问题讨论】:

  • 你的意思是,控件(按钮/其他)不响应鼠标输入吗?还是闪屏里面有动画?
  • 启动画面内的动画滞后
  • 我认为主窗口和闪屏必须分开。在我的情况下,启动画面无法持续工作。一点点停止,然后再动画一点点停止,然后再动画等。

标签: c# wpf backgroundworker


【解决方案1】:

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

可以在我对How to open a child Window like a splash screen before MainWindow in WPF? 问题的回答中找到显示初始屏幕的正常方式,在 Stack Overflow 上。如果您有很多初始化代码(您,而不是框架),那么您可以在启动画面 Window 中执行此操作,然后在关闭启动画面之前将加载的对象传回 MainWindow屏幕。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2019-08-22
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多