.Net程序中彻底关闭Excel和进程外COM的方法

2007-12-06  来源:   浏览次数 1

    在.Net中, 经常我们会利用Excel来展现数据. 我们知道此时, Excel做为一个进程外COM被激活. 可是却无法彻底关闭该进程. 这是什么原因呢?

COM的生命周期依靠计数机制,只有当引用计数为零时,该COM才会被释放.

.Net程序能调用COM,依赖于RCW(运行库可调用包装)组件,它负责把.Net方法的调用参数转化为COM接口中的参数,并调用相应的COM接口, 然后将返回结果最终返回给.net程序的方法.

因此,当在.Net中操作Excel的方法时,意味着RCW在引用Excel中的对象,所以为了彻底关闭Excel,必须将对于这些对象的引用计数清零.在.Net中提供了Marshal.ReleaseComObject .

为了方便起见,可封装如下方法:

  private void NAR(object o)
  {
   try
   {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
   }
   catch {}
   finally
   {
    o = null;
   }
  }

由于垃圾回收的原因,CLR并不会立即回收对象.所以为了能够立即回收,那么可以调用GC.Collect()来迫使垃圾回收器起作用.

上一篇:使用Com组件需要..    下一篇:DirectoryEntry.P..

相关主题:

网友评论