我在以下代码中关闭应用程序后得到一个InvalidComObjectException:
class MyExcelManager
{
myExelAppInstance = new Excel.Application();
// finalizer
~MyExcelManager()
{
myExelAppInstance.Quit(); // InvalidComObjectException thrown here
myExelAppInstance = null;
}
}
为什么?我不应该使用终结器来处理COM对象吗?
答案 0 :(得分:1)
终结者不会处置对象。 Excel.Application接口无论如何都没有Dispose方法。问题是RCW的终结器已经在终结器运行时运行。这是设计,终结者的顺序不是确定性的。
Excel已经释放所有未完成的接口时自动退出。这是由RCW的终结者完成的。不要帮忙。无论如何你想要帮助,然后像这样写:
class MyExcelManager : IDisposable
{
void Dispose()
{
myExelAppInstance.Quit();
}
}
您的类的客户端必须调用Dispose()方法。