Данное сообщение связано с тем, что ваш объект Excel не закрывается, но все еще остается в системном процессе.
На самом деле вы можете полностью освободить объект приложения Excel, но вам нужно позаботиться об этом.
COM-объект, к которому вы обращаетесь, а затем явно освобождаете его через Marshal.FinalReleaseComObject()
, является теоретически правильным, но, к сожалению, очень сложным для управления на практике.
// Cleanup
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(xlRng);
Marshal.FinalReleaseComObject(xlSheet);
xlBook.Close(Type.Missing, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(xlBook);
xlApp.Quit();
Marshal.FinalReleaseComObject (xlApp);
В большинстве примеров кода, которые вы увидите для очистки COM-объектов из .NET, вызовы GC.Collect()
и GC.WaitForPendingFinalizers()
делаются ДВАЖДЫ, как в:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();