2012-11-30 129 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

是的,它的工作原理!謝謝,將來會使用這個規則! –