Получение исключения COM при использовании Interop в приложении .net - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть класс C #, который использует COM-компонент с использованием взаимодействия.Вот пример кода:

public class MyClass
{

MyCOMClass myObj=null;
try
{
myObj = new MyCOMClass();

for (int num = 0; num < myArr.Length; num++)
{    
  //Call a method on myObj and do some processing
}
}
catch(Exception ex)
{
//log exception
}
finally
{
 if (myObj != null)
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj);
            }

}
}

Здесь цикл for выполняется около 150 раз.

n при выполнении этого кода в блоке catch я получаю исключение: «COM-объекткоторый был отделен от лежащего в его основе RCW, не может быть использован. "

Я попытался реализовать интерфейс IDisposable и затем написать метод Dispose:

public class MyClass: IDisposable 
{
 public void Dispose()
        {
            Dispose(true); 
            GC.SuppressFinalize(true); 
        }


        protected virtual void Dispose(bool diposeMgdResources)
        {            
            if (!this.disposed)
            {
                if (diposeMgdResources)
                {
                    if (myObj != null) 
                    { 
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj); 
                    } 
                }
                this.disposed = true;
            }
        }
}

Из клиента я затем вызываю dispose для этого классаlike: myClass.Dispose ();

Но я все еще получаю то же исключение. Чего мне не хватает?

Спасибо за чтение.

1 Ответ

0 голосов
/ 14 марта 2011

Посмотрите на эту статью:

Marshal.ReleaseComObject считается опасным

Вы, вероятно, не хотите звонить Marshal.ReleaseComObject().

...