可以在另一个线程中加载新的 wpf 窗口以避免冻结当前窗口吗?



所以我有一个小问题...当从一个窗口(开始窗口(启动第二个窗口(主窗口(时,第二个窗口非常重,需要大约 10 秒的加载时间,这意味着开始窗口将冻结 10 秒,然后启动第二个窗口并自行关闭。

所以运行这个函数需要 10 秒:BoardTable table = new BoardTable()我希望在加载 10 秒时有一些实时加载符号/图形,而不是冻结整个 UI。

*我尝试在另一个线程结果上加载第二个窗口 => 静态线程错误...

*加载了静态线程(从堆栈溢出的另一篇文章中得到了这个想法(...UI 将冻结或第二个表根本无法加载。

所以我有点困惑,当 UI 只是保持冻结:(时,如何实现某种加载符号

我实际上尝试了一种工作方法,在这里分享它,以防将来其他人遇到同样的问题:

开始窗口:

Thread t = new Thread(new ParameterizedThreadStart(LoadSecondWindow));
t.SetApartmentState(ApartmentState.STA);
t.Start(gameMode);

在新线程上:

private void LoadSecondWindow(object o)
{
GameMode gameMode = (GameMode)o;
Table blackjackTable = new Table(gameMode);
blackjackTable.Show();
Dispatcher.Run();
}

Dispatcher.Run(( 实际上解决了这一切...现在我们可以在我们需要的任何时间内渲染一些 UI 加载符号:D

最新更新