2013-10-30 86 views
4

我正在使用Excel Interop。在我得到的一個方法的開始,我分配了一個新的應用程序實例,並在它結束時我試圖釋放它,但是當我看到TaskManager時,仍然可以看到Excel打開。Excel Interop實例不會關閉

這是代碼:

類成員:private Excel.Application _app;

用法:

public void MethodApp() 
{ 
    _app = new Excel.Application(); 
    .... 
    .... 
    FreeApplicationResources(); 
} 

private void FreeApplicationResources() 
{ 
    _app.Quit(); 
    Marshal.ReleaseComObject(_app); 
} 

MethodApp可以運行若干次,它以相同的量打開實例作爲次數它被稱爲。 Excel爲什麼不關閉?

+0

書籤。 http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects – Sorceri

+0

該鏈接中的最佳答案是「不要使用2點com對象」。那是不正確的。它應該改爲「避免使用COM對象使用2個點」。原因很簡單。如果你知道2點規則是如何工作的,並且你知道如何清理,那麼在使用2點規則時完全沒有問題。我一直都在使用它......你可能想看到[這](http://www.siddharthrout.com/2012/08/06/vb-net-two-dot-rule-when-working-with-office -applications-2 /) –

+0

另請參閱[本鏈接](http://stackoverflow.com/questions/11813758/adding-text-into-excel-sheet-by-using-c-sharp/11813927#11813927)在代碼結束我有一個'私人無效releaseObject(對象obj)'釋放對象。使用它。 –

回答

1

嘗試釋放也用按以下順序任何工作表和工作簿:

Marshal.ReleaseComObject(_worksheet); 
Marshal.ReleaseComObject(_workbook); 
Marshal.ReleaseComObject(_app); 
+0

是否應該在com對象發佈之前進行退出調用? –

+0

@YonatanNir,我不認爲這是必要的,我從你的問題中錯誤地複製了它。 –