2010-01-22 2 views
3

У меня есть сборка C# .NET, которая вызывается из COM-клиента C++. Когда клиентский процесс явно освобождает объект COM, релиз CCW это внутренняя ссылка, что делает объект .NET подходящим для сбора мусора.COM Callable Wrapper и время жизни объекта .NET

Что делать, если объект .NET имеет статический конструктор, который открывает файл журнала? Есть ли элегантное решение закрыть файл журнала без явного запроса от клиента?

TIA.

ответ

1

После некоторого тестирования с использованием AppDomain.ProcessExit EventHandler кажется хорошим выбором для закрытия файла журнала.

0

Если вы не хотите изменять COM-клиент, вам не повезет ни на одну определенную закрытую магию. В конечном счете дескриптор файла будет закрыт в какой-то момент в будущем (при условии, что это FileStream), когда Финалайзер РУЧКУ в вызывается GC после вашего CCW теряет GC корень (с.)

-Oisin

+0

Вызывается ли Finalizer при завершении клиентского процесса? –

+0

Если это COM-сервер в процессе: да. –

+0

После некоторого тестирования с использованием AppDomain.ProcessExit EventHandler кажется хорошим выбором для закрытия файла журнала. –

Смежные вопросы