2012-11-30 92 views
-1

我使用此代码创建一个Excel报表:过程不会终止

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

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

回答

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

这个答案有一个好的规则: How do I properly clean up Excel interop objects?

“不要用两个点与COM对象。”

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

+0

我认为这个对象的释放会杀死进程,我需要保持Excel程序的运行。谢谢,我稍后再试。 –

+0

是的,它的工作原理!谢谢,将来会使用这个规则! –