Excel Interop意外打开第二个Excel实例

时间:2014-01-21 07:41:50

标签: excel f# office-interop excel-interop

我正在尝试将Excel.ApplicationClass包装在IDisposable接口中,以使其在使用后自动关闭。我所拥有的是以下内容:

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

当我在像

这样的函数中调用它时
let func =
    use ex = new Excel.Application()
    ()

启动了两个Excel实例(我可以在我的任务管理器中看到),但只有一个实例再次关闭。谁能告诉我这里我做错了什么?

1 个答案:

答案 0 :(得分: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