如果我的应用程序崩溃,是否会调用 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 值。将它添加到您可以确定会提前实例化的库对象之一的构造函数中。