День добрый всем.
Написал класс — оболочку для COM-объекта. Все работает замечательно, вот только при удалении класса-оболочки мне необходимо сделать некоторые действия с COM-объектом, точнее послать ему сообщения о завершении.
Я создаю WIN — формочку и создаю экземпляр оболочки. При закрытии формы должен вызываться диструктор этой оболочки и посылаться сообщение COM-объекту. На деле же, в методе Finalize COM объект уже очищен — независимо от того CriticalFinalizerObject у меня оболочка или нет. Даже через диспетчер задач видно что COM-объект удаляется, когда закрывается формочка, без ожидания вызова дистркутора оболочки.
Почему так, и как бороться, вот код:
public class MyClass : CriticalFinalizerObject
{
private MyCOMObject _Application;
public MyClass ()
{
_Application = new MyCOMObject ();
}
~MyClass ()
{
//тут в COM объект должно посылатсья сообщение, но вываливается исключение
//"COM object that has been separated from its underlying RCW cannot be used."
_Application.Do("End");
System.Runtime.InteropServices.Marshal.ReleaseComObject(_Application);
}