2010-09-10 154 views
0

,當我得到一個InvalidComObjectException後,我結束我的應用程序下面的一段代碼:InvalidComObjectException使用Excel互操作

class MyExcelManager 
{ 
    myExelAppInstance = new Excel.Application(); 

    // finalizer 
    ~MyExcelManager() 
    { 
    myExelAppInstance.Quit(); // InvalidComObjectException thrown here 
    myExelAppInstance = null; 
    } 
} 

這是爲什麼?我不應該使用終結器來處理COM對象嗎?

回答

1

終結器不處理對象。 Excel.Application接口無論如何都沒有Dispose方法。問題在於RCW的終結器在運行終結器時已經運行。這是設計,終結者的順序是不確定的。

當所有優秀的接口被釋放時,Excel已經自動退出。 RCW的終結者完成了這一工作。不要幫忙。如果你想無論如何幫助,然後寫這樣的:

class MyExcelManager : IDisposable 
{ 
    void Dispose() 
    { 
    myExelAppInstance.Quit(); 
    } 
} 

你的類的客戶端必須調用該Dispose()方法。