为什么我的WPF应用程序在显示WinForms对话框后不能正常关闭?
我在我的WPF应用程序中使用第三方WinForms登录对话框,由于某种原因,这使得我的WPF应用程序在调试时没有正确关闭。
如果我在登录之前退出winforms登录对话框,应用程序将正确关闭,但是如果我成功登录并启动WPF窗口,则退出窗口不会关闭应用程序。
我在App
的OnExit
方法中放了一个断点,它永远不会被调用。 我覆盖了我的主窗口的OnClosing
方法,并且确实被调用但是甚至调用Application.Current.ShutDown()
也没有正确退出应用程序。 我也尝试将我的应用程序的ShutdownMode
设置为OnExplicitShutdown
和OnMainWindowClose
,但这些都没有将其关闭。
我有的唯一提示是调试窗口中出现以下内容,但我不知道它试图告诉我什么。
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.