InvalidComObjectException при использовании Excel Interop - PullRequest
0 голосов
/ 10 сентября 2010

Я получаю InvalidComObjectException после закрытия приложения в следующем фрагменте кода:

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

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

Почему это так?Разве я не должен использовать финализаторы для удаления COM-объектов?

1 Ответ

1 голос
/ 10 сентября 2010

Финализаторы не располагают объектами.Интерфейс Excel.Application в любом случае не имеет метода Dispose.Проблема в том, что финализатор для RCW уже запущен к моменту запуска финализатора.Это так, порядок финализаторов не является детерминированным.

Excel уже закрывается автоматически, когда все выдающиеся интерфейсы выпущены.Что сделано финализаторами для RCW.Не помогаетЕсли вы все равно хотите помочь, напишите это так:

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

Клиент вашего класса должен вызвать этот метод Dispose ().

...