如果我的应用程序崩溃,是否调用Dispose()
本文关键字:调用 Dispose 是否 我的 应用程序 崩溃 如果 | 更新日期: 2023-09-27 18:13:54
我有一个场景,在应用程序崩溃,我必须清除某些注册表项。我正试图使用Dispose()模式。在垃圾收集期间应用程序崩溃的情况下,是否调用Dispose来清除注册表??
是否有其他模式来做这些活动?我不能使用未处理的应用程序处理程序,因为我要调用的代码不是由主应用程序直接引用的。我可以使用反射,但不确定这是不是正确的模式。
如有任何建议或经验,我将不胜感激。
听起来您想要为AppDomain.UnhandledException
事件添加一个事件处理程序,做一些处理(在这种情况下写入注册表),然后让程序死亡。
假设你没有做任何奇怪的事情,比如将你的库加载到不同的AppDomain
中,你应该能够以各种方式从你的库中挂钩它。在过去,我使用了静态构造函数,并从库中挂钩AssemblyResolve
事件。
像这样:
public static class CrashHandler
{
public static bool Initialized { get; private set; }
[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
static CrashHandler()
{
AppDomain.CurrentDomain.UnhandleException += crash_handler;
Initialized = true;
}
static void crash_handler(object sender, UnhandledExceptionEventArgs args)
{
// do your thing here
}
}
为了让它实际启动,您需要至少在某处读取一次Initialized
值。将它添加到一个库对象的构造函数中,您可以确定该对象将在早期实例化。