0

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

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

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

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

4

1 回答 1

1

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

释放所有未完成的接口时,Excel 已经自动退出。这是由 RCW 的终结者完成的。不要帮忙。如果您仍然想提供帮助,请这样写:

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

您班级的客户必须调用该 Dispose() 方法。

于 2010-09-10T17:16:37.330 回答