在应用程序崩溃时执行代码

War*_*pin 4 c# crash

我有一些清理代码,我想在执行结束时执行,即使我的C#应用​​程序崩溃(删除临时文件等).这可能在C#中做到吗?

谢谢!

adr*_*nks 9

这取决于你的意思是"崩溃".

如果要处理任何可能导致应用程序失效的未处理异常,可以将事件处理程序附加到AppDomain.UnhandledException事件,然后处理事件处理程序中的任何错误.

此外,在.Net 4.0中,有一个AppDomain.FirstChanceException在发生异常时执行任何catch块之前被调用.

但是,可能会发生真正的崩溃(例如从终结器抛出异常)导致致命的应用程序退出无法轻松处理,但在大多数情况下,AppDomain.UnhandledException事件可能就足够了.


Joh*_*ler 6

如果您的应用程序崩溃,那么尝试执行清理代码是不安全的,您不知道什么已损坏,并且在您的应用程序实际退出之前,文件可能被锁定等.

所以我建议你把这个清理代码放在应用程序启动时.让你的应用程序在启动之前查找临时文件等,然后再创建它的普通临时文件,如果它找到它们,那么它可以删除它们或尝试修复/重新使用它们.

为此,您可以让应用程序写入它创建的临时文件的日志,并在成功关闭时删除该日志文件.这样,当您在启动时找到日志文件时,您知道上次运行是崩溃,您必须进行清理.

当然,如果允许一次运行应用程序的多个实例,这会变得更复杂,但同样也可以在崩溃时清理.


Ada*_*uth 0

这取决于你所说的“崩溃”是什么意思。如果您指的是未处理的异常,您可以为 Application.ThreadException 创建一个处理程序。如果崩溃是由托管代码外部引起的,则您无能为力。