c# - 如何捕获任何类型的应用程序退出?

标签 c# wpf

我有一个 WPF 应用程序。 我已经实现了以下功能,但没有人捕获所有类型的应用程序退出。

public partial class App : Application
{
    protected override void OnExit(ExitEventArgs e)
    {}

    private void Application_Exit(object sender, ExitEventArgs e)
    {}

    private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {}

    private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e)
    {}
}
  • 是否有处理应用程序退出的通用方法?

例如,当应用程序被强制关闭(终止)时,上述方法都不会触发。 每次应用程序关闭时,我都需要解锁数据库中一些在应用程序运行期间被用户锁定的对象。

最佳答案

不能捕获所有类型的 exists,除非您正在运行一个观察者,与您正在调查的应用程序(“目标”应用程序)分开。

原因是您无法在内部捕获应用程序崩溃(duh)、强制进程终止(内部和外部)或任何类似的情况。

你做的非常好。

如果您确实希望实现一个单独的观察者应用程序,您可以使用 .NET Process.Exited 事件,只要进程因任何原因(包括应用程序崩溃)而存在,就会触发该事件。

此外,正如@Christian 指出的那样,您不应该 尝试拥有一个包罗万象的解决方案,尤其是在处理关键应用程序崩溃时(这一点是主观的)。 “当您以某种方式设法[从未处理的应用程序错误中恢复]时,您通常做错了什么或者至少可能会得到不准确的结果(例如,当尝试从您自己的进程中 P/Invoke 小型转储创建时)。”

关于c# - 如何捕获任何类型的应用程序退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6953549/

相关文章:

c# - 任务被取消

c# - 如何识别点击了哪个按钮? (MVVM)

c# - 将 e.NewValue 转换为十进制

c# - Realm :自增主键

c# - 关闭 TCP 连接的正确方法是什么

c# - 如何删除 wpf 中除一个以外的所有选项卡项?

c# - 为什么只有最后一个菜单项有图标?

c# - WPF - 两个不同 ViewModel 上的绑定(bind)和命令

c# - WCF 错误 "Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding"

c# - Windows 的键值数据库?