0
我有一個C#類,它使用一個使用interop的COM組件。 下面是示例代碼:在.net應用程序中使用Interop時獲取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塊中執行此代碼時,出現異常: 「已從其基礎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;
}
}
}
從客戶端,我然後調用處理這個類,如: myClass.Dispose();
但是,這裏仍然有相同的例外。我錯過了什麼?
感謝您的閱讀。
您可以粘貼'//在myObj上調用方法並執行一些處理代碼?我的第一個猜測是對象在那裏被清理。 – Grzenio 2010-09-14 13:36:37