【发布时间】:2012-11-24 03:51:21
【问题描述】:
我正在使用 Microsoft.Office.Interop.Excel 从 Excel 中获取数据。即使我清除了 COM 对象,它仍然会在后台留下一些 EXEL.EXE 实例。请检查下面的代码。
finally
{
if (cells != null) Marshal.FinalReleaseComObject(cells);
if (range != null) Marshal.FinalReleaseComObject(range);
if (sheets != null) Marshal.FinalReleaseComObject(sheets);
if (workSheet != null) Marshal.FinalReleaseComObject(workSheet);
if (excelWorkBook != null)
{
excelWorkBook.Close(Type.Missing, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(excelWorkBook);
}
if (excelWorkbooks != null) Marshal.FinalReleaseComObject(excelWorkbooks);
if (excel != null)
{
excel.Quit();
Marshal.FinalReleaseComObject(excel);
}
cells = null;
range = null;
sheets = null;
workSheet = null;
excelWorkBook = null;
excelWorkbooks = null;
excel = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
请告诉我哪里出错了。
【问题讨论】:
-
进行了相当广泛的清理,但是 finalreleasecomobject 列表中缺少“工作表”?
-
请检查上面编辑的代码。EXEL.EXE仍然在后台。
-
如果您的帖子中有编辑过的代码,则不会清理其中的“表格”。我也发布了一个答案,因为在其中使用标记更容易;)
标签: kill-process