看了農民伯伯的《C# 操作Excel之旁門左道 [ C# | Excel ]》以後無意中想起年前做的一個小項目自己也遇到過Excel的進程無法結束掉的這種怪問題最終還是解決了其實解決的原理很簡單Excel是一個很特殊的東西所有對它的操作都是獨占的因此就有必要在資源釋放上嚴格進行為了更好的跟大家交流也同時幫助那些正在被困惑的程序員朋友們下面就附上我以前的一段小代碼為了能夠更快更容易說明問題代碼經過了刪減只保存了結構的完整性但不保證能夠順利編譯通過代碼如下
需要引用的命名空間
using Execl = MicrosoftOfficeInteropExcel;
try
{
MicrosoftOfficeInteropExcelApplication excel = new MicrosoftOfficeInteropExcelApplication();
MicrosoftOfficeInteropExcelWorkbook workbook = excelWorkbooksOpen(lujing SystemTypeMissing false SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing SystemTypeMissing);
excelVisible = true;
MicrosoftOfficeInteropExcelWorksheet worksheet = (MicrosoftOfficeInteropExcelWorksheet)workbookWorksheetsget_Item();
//開始執行Excel操作
if (excelActiveWorkbookSaved == false)
{
excelActiveWorkbookSave();
}
excelQuit();
excel = null;
ApplicationExit();
GCCollect(SystemGCGetGeneration(worksheet));
GCCollect(SystemGCGetGeneration(workbook));
GCCollect(SystemGCGetGeneration(excel));
}
catch
{
}
finally
{
GCCollect();
}
同時這裡有一個比較有爭議的問題我特此聲明下微軟強烈建議不要通過GCCollect方法來強制執行垃圾手機因為那會妨礙GC本身的工作方式只有在明確知道有大量對象停止引用時
才考慮使用GCCollect方法來調用收集器
From:http://tw.wingwit.com/Article/program/net/201311/11484.html