我有一个使用 PRISM 的 WPF 应用程序。我有一个登录屏幕,成功登录后会出现一个包含包含许多项目的 TileListView 的新视图。这需要超过 10 秒的时间来渲染,因为控件必须进行大量计算等。所有这些都按标准行为使用 UI 线程,因为 WPF 中的渲染是在 UI 线程中完成的。是否可以在单独的窗口中显示一个像旋转器一样的 WaitControl 或只是一个简单的动画或类似的东西?现在到动画停止时,控件将在 UI 线程中渲染。
您可以创建一个在单独线程中启动的新窗口。请参阅以下博客文章了解如何执行此操作的示例。
在单独的线程中启动 WPF 窗口: https://web.archive.org/web/20230128060513/http://reedcopsey.com/2011/11/28/launching-a-wpf-window-in -a-separate-thread-part-1/
然后,您只需在验证凭据之后和即将开始繁重渲染之前启动此线程,该线程会显示窗口。
这可能是你能做的最好的事情,而且也应该是一件很容易实现的事情。
编辑 - 包括上面链接中的代码,以供后代记录:
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();
}
您可以使用SplashScreen来显示,直到后台进程完成。请参阅此WPF 中的启动屏幕