【问题标题】:Why isn't my WPF closing event being fired for system closes?为什么我的 WPF 关闭事件不会因系统关闭而被触发?
【发布时间】:2010-07-06 05:34:26
【问题描述】:

我在 XAML 文件的 Window 节中有以下行:

    Closing="Window_Closing"

我最初认为网页 here 向我保证,当您使用系统菜单中的 big X 关闭方法、Alt-F4close 时会触发此事件,但似乎并非如此因为我在 Window_Closing() 函数上的断点没有被命中。

当我执行FileExit 退出方法时,它确实遇到了断点,所以一切正常。

重新阅读该链接页面让我相信它可能不会触发关闭事件。

我的问题是:

  1. 您如何捕获列出的三种方法以检测您的文件是否脏并需要保存?我已经完成了所有“脏”和文件保存代码,我只需要知道如何捕获事件。

  2. 你能用那个方法阻止退出发生吗(你可以通过拦截关闭事件)?换句话说,如果用户说他们不想退出,因为在错误的窗口上不小心使用了Alt-F4,可以吗?

【问题讨论】:

    标签: wpf events exit


    【解决方案1】:

    根据Closing 事件的文档页面:

    如果会话因用户登录而结束 关闭或关闭,关闭不是 提高;处理 SessionEnding 到 实现取消的代码 应用程序关闭。

    因此,您需要确保处理 SessionEnding 事件以及 Closing 事件。 SessionEnding 事件可用于自动将当前状态保存到临时文件中,该文件将在下次应用程序启动时再次加载。但是,如果您确实想提示用户,您可以使用 SessionEnding 中的模式对话框来执行此操作,但他们可能会看到 Windows 屏幕警告应用程序无响应,让他们有机会在不响应您的对话框的情况下终止进程。

    【讨论】:

    • 谢谢,乔希。结果它正在执行这三个事件的代码,因为当我将它添加到调试时它弹出了一个消息框。我不确定我的断点(或一般的 vs2008)是否有问题。我会接受这个答案,因为你给了我一个解决我什至不知道的问题的方法:-)
    • 抱歉,我将您的标题误解为“系统正在关闭”,而不是从系统菜单中关闭。
    【解决方案2】:

    改为尝试关闭事件:Closed="Window_Closing"

    【讨论】:

    • 谢谢,Bermo,但我希望能够停止退出,我认为一旦关闭的活动进入,你就无法做到。
    • 对不起,没有仔细阅读这个问题(对不起双关语 - 忍不住!)。
    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2017-02-20
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多