VSTO关闭文档再打开,不加载插件问题

 问题分析:

这种现象一般是还有代码在执行,或者资源未回收。

检查关闭文档之后是否还有多线程或者代码还在执行,发现并没有。

那么很可能是资源未及时回收导致的,因为C#有自动回收机制,一般不用担心这个问题。但我在插件中有部分代码是调用COM相关和API这些的东西,若这些有残留资源在内存中,不会自动及时释放,会导致这个问题。

 

解决问题:

解决方法当然是找到会处理回收资源的地方,做回收处理。

不过这样处理有难度,因为有些代码不确定是否需要回收处理,而且很难定位到具体位置。再者,若针对每个类都写析构方法也很麻烦。

C#已经为我们提供了全部回收资源的处理。可以在插件关闭的事件执行该操作,打开ThisAddin.cs,添加引用:

using System.Runtime.InteropServices;
再找到ThisAddin的Shutdown事件,添加如下代码:
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
    //强制回收资源
    //有时关闭Excel文件,都残留Excel.exe空进程。导致下次打开Excel文件,没有加载插件
    //有时才会,不是每次都会,说明有时可以回收资源,有时回收不了
    try
    {
        GC.Collect();
        Marshal.FinalReleaseComObject(Globals.ThisAddIn.Application);
        GC.Collect();
    }
    catch { }
}

同样,Word、PPT插件开发时,也可以添加上面的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值