在 WPF 中渲染 UIElement 期间等待屏幕

Wait screen during rendering UIElement in WPF

我有一个使用 PRISM 的 WPF 应用程序。我有一个登录屏幕,成功登录后会出现一个包含带有许多项目的 TileListView 的新视图。这需要超过 10 秒来渲染,因为控件必须计算很多等等。所有这些都使用标准行为的 UI 线程,因为 WPF 中的渲染是在 UI 线程中完成的。是否可以像微调器一样显示 WaitControl 或单独显示一个简单的动画 window 或类似的东西?现在到动画停止时,控件在 UI 线程中呈现。

您可以使用启动画面显示,直到后台进程完成。参考这个 Splash Screen in WPF

您可以创建一个在单独线程中启动的新 window。有关如何执行此操作的示例,请参阅以下博客 post。

在单独的线程中启动 WPF Window: http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in-a-separate-thread-part-1/

然后您只需启动这个显示 window 的线程,就在您验证了凭据之后并且就在您的大量渲染即将开始之前。

这可能是您能做的最好的事情,而且应该也很容易实现。

编辑 - 包括来自上面 link 的代码,为 posterity 记录:

    using System.Threading;
    using System.Windows.Threading;

    void LoadWindowInThread()
    {
        Thread newWindowThread = new Thread(new ThreadStart(() =>
        {
            // Create our context, and install it:
            SynchronizationContext.SetSynchronizationContext(
                new DispatcherSynchronizationContext(
                    Dispatcher.CurrentDispatcher));

            // Create and configure the window
            Window1 tempWindow = new Window1();

            // When the window closes, shut down the dispatcher
            tempWindow.Closed += (s, e) =>
               Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);

            tempWindow.Show();
            // Start the Dispatcher Processing
            Dispatcher.Run();
        }));
        newWindowThread.SetApartmentState(ApartmentState.STA);
        // Make the thread a background thread
        newWindowThread.IsBackground = true;
        // Start the thread
        newWindowThread.Start();
    }