2010-09-14 53 views
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();

但是,這裏仍然有相同的例外。我錯過了什麼?

感謝您的閱讀。

+0

您可以粘貼'//在myObj上調用方法並執行一些處理代碼?我的第一個猜測是對象在那裏被清理。 – Grzenio 2010-09-14 13:36:37

回答

相關問題