看了农民伯伯的《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方法来调用收集器