使用Excel Interop时出现InvalidComObjectException

时间:2010-09-10 15:01:10

标签: .net excel com interop finalizer

我在以下代码中关闭应用程序后得到一个InvalidComObjectException:

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

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

为什么?我不应该使用终结器来处理COM对象吗?

1 个答案:

答案 0 :(得分:1)

终结者不会处置对象。 Excel.Application接口无论如何都没有Dispose方法。问题是RCW的终结器已经在终结器运行时运行。这是设计,终结者的顺序不是确定性的。

Excel已经释放所有未完成的接口时自动退出。这是由RCW的终结者完成的。不要帮忙。无论如何你想要帮助,然后像这样写:

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

您的类的客户端必须调用Dispose()方法。