2013-03-30 78 views
1

我在App_Startup()中加载MainWindow。我想在加载窗口时显示进度条。但它不工作:STA线程未加载WPF主窗口

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; 

     } 
+1

会发生什么?出了什么问题? –

+1

您是否考虑过使用内置的[SplashScreen](http://msdn.microsoft.com/zh-cn/library/system.windows.splashscreen.aspx)class [instead](http://stackoverflow.com/问题/ 6121892/WPF的启动画面,直到窗口-端加载)? –

+0

该应用程序自动关闭。 – maxpaul

回答

1

你可以试试这个:

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后退出时,应用程序将停止关闭。

+0

非常感谢。这工作像一个魅力。 – maxpaul

0

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

+0

有什么建议吗? – maxpaul