c# - 调用弹出窗口的 `.ShowDialog()` 时 WPF 应用程序关闭

标签 c# wpf

首先我想解释一下我要做什么:我正在开发一个学习应用程序来向学生展示一些卡片。我有 CardPack 类,它是一组卡片。

为了获得卡片包的许可,我想从用户那里获得一个 ID,然后我创建了一个窗口来从用户那里获得 RegisterKey。这是我的 GetRegisterKey("CardPackName") 方法:

    public static string GetRegisterKey(string name)
    {
        GetRegisterKey grk = new GetRegisterKey(name);
        grk.ShowDialog();
        return grk.Key;
    }

但在 grk.ShowDialog(); 运行程序后将退出,我不知道为什么! 谁能帮我解决这个问题?!?


更新

我试图在 MainWindowsWindows_loaded 事件中创建一个 GetRegisterKey 的新实例,我调用了 grk.ShowDialog() 并且运行良好,程序没有关闭。我不知道问题的根源是什么!

但我发现问题不是来自 GetRegisterKey 然后我会从问题中删除它的代码。

更新2

我在 return grk.Key; 行中放置了一个断点来检查它是否运行但它没有运行并且程序关闭了!

最佳答案

请参阅 Application.ShutDownMode,

http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx

只有在调用 Application 的 Shutdown 方法时,应用程序才会停止运行。关闭可以隐式或显式发生,由 ShutdownMode 属性的值指定。

如果将 ShutdownMode 设置为 OnLastWindowClose,Windows Presentation Foundation (WPF) 会在应用程序中的最后一个窗口关闭时隐式调用 Shutdown,即使任何当前实例化的窗口都设置为主窗口(请参阅 MainWindow)。

OnMainWindowClose 的 ShutdownMode 会导致 Windows Presentation Foundation (WPF) 在 MainWindow 关闭时隐式调用 Shutdown,即使其他窗口当前处于打开状态也是如此。

某些应用程序的生命周期可能不依赖于主窗口或最后一个窗口何时关闭,或者可能根本不依赖于窗口。对于这些情况,您需要将 ShutdownMode 属性设置为 OnExplicitShutdown,这需要显式 Shutdown 方法调用来停止应用程序。否则,应用程序将继续在后台运行。

ShutdownMode 可以通过 XAML 以声明方式配置,也可以通过代码以编程方式配置。

此属性仅在创建 Application 对象的线程中可用。

关于c# - 调用弹出窗口的 `.ShowDialog()` 时 WPF 应用程序关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734066/

相关文章:

c# - 尽管 UI 存在于 STAThread 中,为什么 Control.(Begin)Invoke 是必要的?

c# - 使用 iTextSharp 提取 FlateDecode 图像

c# - 从Azure Redis缓存插入或删除值时,是否需要在代码级别进行同步?

C# MEF : Exporting multiple objects of one type, 和导入特定的

c# - 使用 C# 测试 Ctrl 键是否按下

c# - 无法等待进程运行直到结束

wpf - 如何在共享 ResourceDictionary 中定义窗口实例的默认背景颜色?

c# - 在 Prism 6 中加载所有模块后使用 ViewModel 初始化 Shell

c# - KeyTip 在 Microsoft 功能区中不起作用

c# - 添加新项目后立即添加新行