2014-01-21 58 views
1

我試圖在一個IDisposable接口中封裝Excel.ApplicationClass,使其在使用後自動關閉。我所擁有的是類似如下:Excel Interop意外地打開第二個Excel實例

module Excel = 
    type Application() = 
     member private this.excel = new Excel.ApplicationClass() 

     interface IDisposable with 
      member this.Dispose() = 
       this.excel.Quit() 
       Marshal.ReleaseComObject(this.excel) |> ignore 

當我把它的功能就像Excel的

let func = 
    use ex = new Excel.Application() 
    () 

兩個實例開始(我可以在任務管理器中看到),但只有一個他們再次關閉。任何人都可以告訴我我在這裏做錯了什麼?

回答

3

您的this.excel屬性在每次評估時都會創建一個新的Excel進程,因此調用Dispose會創建一個進程並立即退出,另一個進程僅用於調用Marshal.ReleaseComObject。第二個可能是一個活着的人。

更改您的代碼是這樣的:

module Excel = 
    type Application() = 
     let m_excel = new Excel.ApplicationClass() 

     member private this.excel = m_excel 

     interface IDisposable with 
      member this.Dispose() = 
       this.excel.Quit() 
       Marshal.ReleaseComObject(this.excel) |> ignore 
+0

完美!非常感謝! – torbonde