我正在使用此代码创建Excel报告:
var excel = new Excel.Application();
foreach (var report in m_reports)
report.PrintReport(excel.Workbooks.Add().Sheets.Add());
excel.Visible = true;
一切正常。但是,当用户手动关闭Excel时,Excel进程将在任务管理器中保持打开状态。为什么呢?
答案 0 :(得分:3)
在MSDN上查看Releasing ComObjects
System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );
如果您想在foreach循环中执行其他操作,我建议您以正确的代码块格式包装代码,例如
foreach (var report in m_reports)
{
report.PrintReport(excel.Workbooks.Add().Sheets.Add());
}
excel.Visible = true;
//Release the ComObject
System.Runtime.InteropServices.Marshal.ReleaseComObject( excel );
答案 1 :(得分:1)
这个答案有一个很好的规则: How do I properly clean up Excel interop objects?
“切勿在com对象中使用两个点。”
您正在声明工作簿和工作表对象而不会释放它们 - 这就是为什么该进程不会退出。