流程不会终止

时间:2012-11-30 00:51:01

标签: c# excel

我正在使用此代码创建Excel报告:

 var excel = new Excel.Application();
 foreach (var report in m_reports)
     report.PrintReport(excel.Workbooks.Add().Sheets.Add());
 excel.Visible = true;

一切正常。但是,当用户手动关闭Excel时,Excel进程将在任务管理器中保持打开状态。为什么呢?

2 个答案:

答案 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对象中使用两个点。”

您正在声明工作簿和工作表对象而不会释放它们 - 这就是为什么该进程不会退出。