STA线程未加载WPF中的主窗口
本文关键字:窗口 WPF 线程 加载 STA | 更新日期: 2023-09-27 18:06:33
我正在App_Startup((中加载MainWindow。我想在加载窗口时显示进度条。但它不起作用:
void App_Startup(object sender, StartupEventArgs e)
{
Thread bootStrapThread = new Thread(new ThreadStart(runBootStrapProcess));
bootStrapThread.SetApartmentState(ApartmentState.STA);
bootStrapThread.IsBackground = true;
bootStrapThread.Start();
_loadingProgressBar = new loadingProgressBar();
_loadingProgressBar.ShowDialog();
}
我想从线程加载窗口:
void runBootStrapProcess()
{
MetadataReader mr = new MetadataReader();
if (currentVersionNo.Equals(remoteVersionNo))
{
Application.Current.Shutdown();
}
else
{
MainWindow mw = new MainWindow();
mw.Show();
}
_loadingProgressBar.ShouldCloseNow = true;
}
你可以试试这个:
void runBootStrapProcess() {
MetadataReader mr = new MetadataReader();
if (currentVersionNo.Equals(remoteVersionNo)) {
Application.Current.Shutdown();
} else {
System.Windows.Application.Current.Dispatcher.BeginInvoke(
new Action(
() => {
MainWindow mw = new MainWindow();
mw.Show();
}));
}
_loadingProgressBar.ShouldCloseNow = true;
}
当您想要显示窗口时,基本上是从线程将其发送到主应用程序线程。因此,这在线程退出时阻止了应用程序关闭,因为MainWindow
是从主线程显示的。
我怀疑窗口缺少消息泵,因为WPF应用程序类及其Dispatcher正在不同的STA线程上运行