天天看點

.Net程式中如何徹底關閉Excel - 關閉程序外COM方法

在.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()來迫使垃圾回收器起作用.

具體的例子請參考: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B317109