首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STA线程未在WPF中加载主窗口

STA线程未在WPF中加载主窗口
EN

Stack Overflow用户
提问于 2013-03-31 04:53:48
回答 2查看 1.5K关注 0票数 1

我在App_Startup ()中加载MainWindow。我想在加载窗口时显示进度条。但它不起作用:

代码语言:javascript
复制
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();

}

我想从线程加载窗口:

代码语言:javascript
复制
void runBootStrapProcess()
        {
            MetadataReader mr = new MetadataReader();  
            if (currentVersionNo.Equals(remoteVersionNo))
            {
                Application.Current.Shutdown();
            }
            else
            {
                MainWindow mw = new MainWindow();
                mw.Show();
            }

            _loadingProgressBar.ShouldCloseNow = true;

        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-31 07:09:22

您可以尝试这样做:

代码语言:javascript
复制
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是从主线程显示的。

票数 1
EN

Stack Overflow用户

发布于 2013-03-31 05:32:54

我怀疑窗口缺少消息泵,因为WPF应用程序类及其调度程序在不同的STA线程上运行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15723373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档