Похоже, сегодня вы пытаетесь записать файл настроек в финализаторе вашего объекта, используя поле SafeHandle
.Это не правильный подход.
Как только объект попадает в поток финализатора CLR, все ставки отключаются относительно других управляемых ресурсов, которые может видеть объект.Это очень законно и возможно, что поле SafeHandle
уже завершено и, следовательно, недействительно к моменту запуска финализатора содержащего класса.
Стандартный способ работы с таким сценарием заключается в реализации IDisposable
и использовании метода Dispose
(который должен вызываться кодом пользователя) для правильной утилизации управляемых ресурсов, например файла,
Например:
abstract class MyClass : IDisposable {
private SafeFileHandle _handle;
public void Dispose() {
WriteTheFile();
_handle.Dispose();
}
}