我使用此代码创建一个Excel报表:过程不会终止
var excel = new Excel.Application();
foreach (var report in m_reports)
report.PrintReport(excel.Workbooks.Add().Sheets.Add());
excel.Visible = true;
,一切工作正常。但是,当用户手动关闭Excel时,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进程在任务管理器中保持打开状态。为什么?
采取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);
这个答案有一个好的规则: How do I properly clean up Excel interop objects?
“不要用两个点与COM对象。”
您正在声明工作簿和工作表对象而不会释放它们 - 这就是为什么该过程不会退出。
我认为这个对象的释放会杀死进程,我需要保持Excel程序的运行。谢谢,我稍后再试。 –
是的,它的工作原理!谢谢,将来会使用这个规则! –