我正在尝试将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实例(我可以在我的任务管理器中看到),但只有一个实例再次关闭。谁能告诉我这里我做错了什么?
答案 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