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;
        }

STA线程未加载WPF中的主窗口

你可以试试这个:

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线程上运行