Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > COM объект и Finalize


Автор: DragonFire 12.7.2009, 15:13
День добрый всем.

Написал класс - оболочку для 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);
   }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)