COM объект и Finalize
От: DragonFire Россия  
Дата: 13.07.09 18:15
Оценка:
День добрый всем.

Написал класс — оболочку для 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);
   }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.