C#学习教程:WPF应用程序在调用弹出窗口的`.ShowDialog()`时关闭完成的事情:我正在开发一个学习应用程序,向学生展示一些抽认卡。我有CardPack类,这是一组卡片。为了许可卡包,我想从用户那里得到一个ID,然后我创建了一个窗口来获取用户的RegisterKey。这是我的GetRegisterKey("CardPackName")方法:publicstaticstringGetRegisterKey(stringname){GetRegisterKeygrk=newGetRegisterKey(name);grk.ShowDialog();返回grk.Key;但是在grk.ShowDialog();正在运行的程序会退出,不知道为什么!谁能帮我解决这个问题?!?更新我试图在MainWindowsWindows_loaded事件中创建一个GetRegisterKey的新实例,我调用了grk.ShowDialog()并且它工作正常,程序没有关闭。我不知道我的问题的根源是什么!但是我发现问题不是来自GetRegisterKey那么我将从问题中删除它的代码。UPDATE2我给了一个断点returngrk.Key;行来检查它是否正在运行但它没有并且程序已关闭!参见Application.ShutDownMode,http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx只有当Application的Shutdown方法被调用时,应用程序才会停止运行。关机可以隐式或显式发生,由ShutdownMode属性的值指定。如果将ShutdownMode设置为OnLastWindowClose,WindowsPresentationFoundation(WPF)会在应用程序中的最后一个窗口关闭时隐式调用Shutdown,即使任何当前实例化的窗口都设置为主窗口(请参阅MainWindow)。OnMainWindowClose的ShutdownMode会导致WindowsPresentationFoundation(WPF)在MainWindow关闭时隐式调用Shutdown,即使其他窗口当前处于打开状态也是如此。一些应用程序的生命周期可能不依赖于主窗口或最后一个窗口何时关闭,或者根本不依赖于窗口。对于这些情况,您需要将ShutdownMode属性设置为OnExplicitShutdown,这需要显式调用Shutdown方法来停止应用程序。否则,应用程序将继续在后台运行。ShutdownMode可以通过XAML以声明方式配置,也可以通过代码以编程方式配置。此属性仅可从创建Application对象的线程使用。你能订阅App.xaml.cs中的以下事件进行调试吗?它将帮助您检查堆栈跟踪并查找是否有任何未处理的异常导致此问题。publicpartialclassApp:Application{publicApp(){this.DispatcherUnhandledException+=newDispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);this.Exit+=newExitEventHandler(App_Exit);}voidApp_Exit(objectChecksender,ExitEvent){.}voidApp_DispatcherUnhandledException(objectsender,DispatcherUnhandledExceptionEventArgse){//检查这个事件处理程序是否被执行以及控制从哪里到达这个方法。我不知道你是如何打开GetRegistryKey窗口的,但我就是这么想的。您可以从App.xaml文件设置StartupUri="MainWindow.xaml",或者通过编写您自己的Main方法并调用application.Run(newMainWindow())来禁用它。但是,对于任何一种情况,您都打开了MainWindow并阻止了注册表窗口。所以,我猜你以某种方式在MainWindow类之前创建了GetRegistryKey窗口。据我所知,应用程序声称第一个创建的窗口是它的主窗口。所以你需要在关闭前设置Application.Current.MainWindow。以上是C#学习教程:调用弹窗的`.ShowDialog()`时,WPF应用关闭所有共享内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注~本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
