我有以下代码,我已经在. Net Framework 4.8中使用了很多年,用于在我的启动中显示闪屏:
Thread newWindowThread = new Thread(new ThreadStart(() =>
{
WpfSplashScreen splash = new WpfSplashScreen();//Get stuck here!
splash.Show();
Thread.Sleep(3000);
splash.Close();
}));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
//Loading some things...
Thread.Sleep(4000);
但是在将我的项目迁移到. net 8之后,它停止了像以前一样的工作.现在创建的新线程显示SplashScreen在对话框初始化时卡住了,只有在主线程完成后才继续,这导致我的SplashScreen只有在所有加载完成后才打开.
调试时,如果我进入'WpfSplashScreen()',我可以看到线程停止在'InitializeComponent()'方法.
我不想将SlpashScreen更改为另一个组件,这不是这里的 idea ,我已经使用相同的方法在我的程序的许多部分中打开它们自己的线程上的其他对话框,因为不同的原因(例如一个progressbar窗口),所有情况下迁移后都有相同的问题.SplashScreen是我关于这个问题的最简单的例子.因此,我真的需要知道如何使Wpf对话框初始化不挂起. Net 8中的单独线程.
有什么 idea 吗?