如果我的应用程序崩溃,是否会调用Dispose()?

时间:2015-09-22 01:33:42

标签: c# crash dispose

我有一个场景,在应用程序崩溃时,我必须清除某些注册表项。我正在尝试使用Dispose()模式。如果在垃圾收集期间应用程序崩溃,则会调用Dispose来清除注册表???

还有其他模式可以进行此类活动吗?我不能使用未处理的应用程序处理程序,因为我想调用的代码不是由主应用程序直接引用的。我可以使用反射,但不确定这是否是正确的模式。

对此事的任何建议或经验都将非常感激。

1 个答案:

答案 0 :(得分:1)

听起来你想在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值。将它添加到您的一个库对象的构造函数中,您可以确保它们可以提前实例化。