在.net应用程序中使用Interop时出现COM异常

时间:2010-09-14 13:13:51

标签: c# com interop

我有一个使用互操作的COM组件的C#类。 以下是示例代码:

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块中执行此代码,我得到一个异常: “无法使用已与其基础RCW分离的COM对象。”

我尝试实现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,如: myClass.Dispose();

但是,我在这里仍然得到同样的例外。我错过了什么?

感谢阅读。

1 个答案:

答案 0 :(得分:0)

看一下这篇文章:

Marshal.ReleaseComObject considered dangerous

您可能不想致电Marshal.ReleaseComObject()