我有一个 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/