2009-03-03 112 views
31

我目前正在編寫一個WPF應用程序,它在App.xaml.cs中執行命令行參數處理(這是必需的,因爲啓動事件似乎是推薦的獲取方法在那些論據中)。根據我想退出該程序的論點,據我所知,應該在WPF中用Application.Current.Shutdown()或在這種情況下(因爲我在當前的應用程序對象中)也可能只是this.Shutdown()從App.xaml.cs中關閉WPF應用程序

唯一的問題是,這似乎並不正確。在Shutdown()行仍然被執行後,我已經完成了調試器和代碼,這導致了方法中的錯誤,因爲我預計應用程序不會活得那麼久。主窗口(在XAML的StartupUri屬性中聲明)仍然被加載。

我已經檢查過該方法的文檔,並且在評論中沒有發現任何內容,告訴我在Application.StartupApplication之間根本不應該使用它。

那麼,當時退出程序的正確方法是什麼?即Application對象中的Startup事件處理程序?

+1

你得到的錯誤是什麼?請更新您的問題。 – 2009-03-03 11:49:02

+0

單擊[這裏](http://stackoverflow.com/a/6602102/2342414)爲一個簡單和工作的答案 – benshabatnoam 2016-03-01 08:45:47

回答

46

首先從App.xaml中刪除StartupUri屬性,然後使用以下命令:

protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     bool doShutDown = ...; 

     if (doShutDown) 
     { 
      Shutdown(1); 
      return; 
     } 
     else 
     { 
      this.StartupUri = new Uri("Window1.xaml", UriKind.Relative); 
     } 
    } 
+0

仍然無法正常工作:( 特別是我在主窗口的構造函數,可能會得到NullReferenceExceptions但據我瞭解,關閉應用程序應該不需要實例化StartupUri引用的窗口。 – Joey 2009-03-03 12:00:38

8

如果從App.xaml中取出的StartupUri與你需要確保你進行以下一個主窗口的應用程序調用OnStartup方法,否則當您的MainWindow關閉時,應用程序不會終止。

this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose; 

@Frank Schwieterman,沿着這些線路的東西可以幫助你與你的控制檯窗口的問題。