C# COM Object或Excel未正确关闭,资源未成功释放解决方法

最近开发一个工具,需要调用Office.Intreop.Excel,最后关闭Excel对象的时候,明明调用了close和quit方法,打开进程一看,Excel进程依然存在,说明资源没有被正确关闭,虽然不影响使用,但是很不美观,不优雅,这不是一个合格的程序。

网上搜了很多方法,一个一个去尝试,很多方法都不能解决,但是最终还是找到了可以解决的方法,话不多说,直接贴代码,后面作解释:

try
{
    Excel.Application excel = new Excel.Application();
    Excel.Workbooks workbooks = excel.Workbooks;
    Excel.Workbook workbook = workbooks.Open("FileName");
    ...
    ...
    ...
}
catch (Exception e) { }
finally
{
    workbook.Save();
    workbook.Close();
    workbooks.Close();

    excel.Quit();

    GC.Collect();

    System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
}

首先,在COM Objects中,永远不要使用两个 ".",例如:

// 写法1
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open("FileName");

// 写法2
Excel.Application excel = new Excel.Application();
Excel.Workbooks workbooks = excel.Workbooks;
Excel.Workbook workbook = workbooks.Open("FileName");

千万要避免用第一种写法,用第二种写法,因为你永远都不知道连着用“.”会出现什么样的bug(亲测有bug)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值