为什么我的WPF应用程序在显示WinForms对话框后不能正常关闭?

我在我的WPF应用程序中使用第三方WinForms登录对话框,由于某种原因,这使得我的WPF应用程序在调试时没有正确关闭。

如果我在登录之前退出winforms登录对话框,应用程序将正确关闭,但是如果我成功登录并启动WPF窗口,则退出窗口不会关闭应用程序。

我在AppOnExit方法中放了一个断点,它永远不会被调用。 我覆盖了我的主窗口的OnClosing方法,并且确实被调用但是甚至调用Application.Current.ShutDown()也没有正确退出应用程序。 我也尝试将我的应用程序的ShutdownMode设置为OnExplicitShutdownOnMainWindowClose ,但这些都没有将其关闭。

我有的唯一提示是调试窗口中出现以下内容,但我不知道它试图告诉我什么。

 The thread 'vshost.RunParkingWindow' (0xf74) has exited with code 0 (0x0). The thread  (0x1b58) has exited with code 0 (0x0). 

只有在Visual Studio中以调试模式运行时才会出现此问题。 无需调试即可运行应用程序正确关闭应用程序

任何人都可以指出我可能导致这种行为的正确方向吗?

编辑

WinForms登录对话框不是带有Show()Close()方法的传统登录对话框,它是一个只有Login()Logout()方法的静态类。

有人这样使用它:

 if (CompanyNamespace.ApplicationName.Login()) { var shell = new ShellView(); var context = new ShellViewModel(); shell.DataContext = context; shell.Show(); // When the Shell Window gets closed, the debugger doesn't stop } else { Application.Current.Shutdown(); // Works fine } 

这听起来很愚蠢,但你试过调用winformsLoginDialog.Close(); 在主窗口的onClosing方法? 我怀疑winforms登录对话框仍然有一个线程正在运行,和/或表单可能已被隐藏而不是关闭。

你可以试试System.Environment.Exit(0)

我相信默认的关机模式是

 ShutdownMode = ShutdownMode.OnLastWindowClose 

如果应用程序没有关闭,那么仍然会打开窗口。 检查调试器中的Application.Current.Windows集合以查找有问题的窗口。

所以我认为最好用

 ShutdownMode = ShutdownMode.OnMainWindowClose; 

然后确保设置以下内容

 Application.Current.MainWindow= MyWindow; // Shell etc.