如何捕获任何类型的应用程序出口

本文关键字:应用程序 出口 类型 何捕获 任何 | 更新日期: 2023-09-27 18:04:31

我有一个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)
    {}
}
  • 是否有一种通用的方法来处理应用程序退出?

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

如何捕获任何类型的应用程序出口

无法捕获所有类型的存在,除非您正在运行一个观察者,与被调查的应用程序("目标"应用程序)分开。

原因是您不能在内部捕获应用程序崩溃(duh),强制进程终止(内部和外部)或任何类似的效果。

你做得非常好。

如果你想实现一个单独的观察者应用程序,你可以使用。net Process.Exited事件,当一个进程因为任何原因存在时,它就会被触发,包括应用程序崩溃。

此外,正如@Christian所指出的,不应该试图有一个包罗万象的解决方案,特别是在处理关键的应用程序崩溃时(这一点是主观的)。"当你设法[从未处理的应用程序错误中恢复]时,你通常做错了什么,或者至少可能得到不准确的结果(例如,当试图从你自己的进程P/Invoke一个迷你转储创建时)。"

您可以将处理程序附加到AppDomain。ProcessExit事件;据我所知,这是判断应用程序何时退出的最可靠的方法。

如果你将你的应用程序移动到Silverlight,这将不可用,但只要你留在WPF(或任何其他"全尺寸"的。net框架应用程序),这应该是可行的。