如果我的应用程序崩溃,是否会调用 Dispose()?
Does Dispose() get called if my app crashes?
我有一个应用程序崩溃的场景,我必须清除某些注册表项。我正在尝试为其使用 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
值。将它添加到您可以确定会提前实例化的库对象之一的构造函数中。
我有一个应用程序崩溃的场景,我必须清除某些注册表项。我正在尝试为其使用 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
值。将它添加到您可以确定会提前实例化的库对象之一的构造函数中。