У меня есть класс 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 ();
Но я все еще получаю то же исключение. Чего мне не хватает?
Спасибо за чтение.