1

我有一个 WPF 应用程序,在文件中有两个方法Application_Startup,它们分别与应用程序的和事件挂钩。下面是这两种方法的实现:Application_ExitApp.csStartupExit

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

1 回答 1

4

可能是自动关闭,因为您有效地关闭了最后一个窗口。您可以在获取凭据时尝试将其更改为Application.ShutdownModeOnExplicitShutdown

(您也可以将其设置为OnMainWindowClose永久并设置Application.MainWindow为主视图)

于 2013-08-16T20:04:53.657 回答