2010-09-10 117 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()方法。