我有一个WPF应用程序,在Application_Startup
文件中有两个方法Application_Exit
和App.cs
,这些方法与Startup
和Exit
事件挂钩申请分别。以下是这两种方法的实现:
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();
然后应用程序工作得很好。知道什么可能出错吗?提前谢谢。
答案 0 :(得分:4)
可能是因为您有效关闭了最后一个窗口而自动关闭。您可以尝试在获取凭据时将Application.ShutdownMode
更改为OnExplicitShutdown
。
(您也可以将其永久设置为OnMainWindowClose
并将Application.MainWindow
设置为主视图