我使用此代碼創建一個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程序的運行。謝謝,我稍後再試。 –
是的,它的工作原理!謝謝,將來會使用這個規則! –