2013-08-16 147 views
1

我有一個WPF應用程序,用兩種方法在App.cs文件Application_StartupApplication_Exit,分別鉤在應用程序的StartupExit事件。下面是這兩個方法的實現:應用立即終止()

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    try 
    { 
     if (LoginModel.TryLoginUsingSavedCredentials()) 
     { 
      MainView view = new MainView(); 
      view.Show(); 
     } 
     else 
     { 
      LoginView loginView = new LoginView(); 
      var result = loginView.ShowDialog(); 

      if (result.HasValue && result.Value) 
      { 
       MainView view = new MainView(); 
       view.Show(); 
      } 
     } 
    } 
    catch (FaultException ex) 
    { 
     Views.MessageBox.ShowMessage("Login failed", 
      string.Format("Unabled to login.\r\n{0}", ex.Message), 
      Entities.Enums.DialogType.OK, 
      Entities.Enums.DialogIcon.Error); 
    } 
} 

private void Application_Exit(object sender, ExitEventArgs e) 
{ 
    ConnectionFactory.Instance.CloseAllProxyChannels(); 
} 

當我運行應用程序,如果LoginModel.TryLoginUsingSavedCredentials()返回false,則顯示LoginView。現在,我在if(result.HasValue ...)處設置了一個斷點,然後我介入。MainView被創建並且view.Show()被執行,但是,調試器箭頭立即跳轉到Application_Exit方法,並且應用程序終止。我看不出有任何異常,輸出誤差,轉儲文件等

奇怪的是,如果我在Application_Startup註釋掉所有的邏輯,只是把這兩行:

MainView view = new MainView(); 
view.Show(); 

然後應用程序工作得很好。任何想法可能會出錯?提前致謝。

回答

4

可能是自動關機,因爲您有效關閉了最後一個窗口。您可以嘗試在獲取憑證時將Application.ShutdownMode更改爲OnExplicitShutdown

(您也可以將其設置爲OnMainWindowClose永久和設置Application.MainWindow到您的主視圖)

+0

該訣竅。謝謝。 – PoweredByOrange

+0

不客氣,很高興幫助:) –