1

我编写了一些从 Excel 文件读取并输出 Excel 文件的 C# 程序。但是,我注意到,在程序终止并且所有文件都已关闭后,我仍然有很多 Excel 进程仍在运行。这是我处理文件创建和关闭的方式:

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
...
wb.Close(true, saveDirectory + "\\" + reportName, false);
xlApp.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xlApp);
this.Close();

我错过了什么吗?任何建议表示赞赏。

问候。

4

1 回答 1

4

您的代码并未释放所有 COM 引用(例如xlApp.Workbooks.Add,创建对Workbooks从未释放的对象的引用)。因此,Excel 实例不会关闭,如本知识库文章中所述,并在许多 StackOverflow 问题中进行了详细讨论。

当您的进程终止后,当 COM 检测到一段时间没有来自客户端的 ping 时,Excel 实例最终将关闭。

于 2012-08-24T13:42:42.430 回答