【发布时间】:2012-08-05 22:54:46
【问题描述】:
我为 Excel 任务使用了一些对象,例如工作簿、工作表、应用程序。完成 Excel 后,我尝试通过下面的代码发布它们。毕竟,我仍然在任务管理器中看到 EXCEL.EXE。为什么不完全释放?
我的 Excel 任务课程:
Excel._Application app = new Excel.Application();
Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet.Cells[1, 1] = "test string";
workbook.SaveAs("C:\testfile.xlsx");
object misValue = System.Reflection.Missing.Value;
workbook.Close(true, misValue, misValue);
app.Quit();
releaseObject(worksheet2);
releaseObject(workbook);
releaseObject(app);
releaseObject 类:
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
EXCEL.EXE 仍在任务管理器中:
【问题讨论】:
-
您也可以尝试将
app、workbook和worksheet设置为null,以向GC 指示不再需要对这些对象的引用。 -
-
@barrowc 一针见血。我怀疑这是一个错字。我使用相同的
releaseObject(object obj),从来没有遇到过问题...... -
worksheet2 是您猜的错字。分配 null 不起作用。此问题页面中有 3 个好主意,但没有一个有效。这个问题真的让我很烦。如果我关闭应用程序,所有 EXCEL.EXE 文件都会终止。我不关闭它,所有EXCEL.EXE文件都在后台!
-
你找到解决这个恼人问题的方法了吗?