当 COM 对象即将与 RCW 断开连接而不实现 IDisposale 接口并在客户端代码中显式调用 MyObject.Dispose 时,有什么方法可以运行代码?
下面的代码不起作用。当程序进入 Finalize sub 时,ExcelApplication 已经与 RCW 断开连接,并且出现错误。我理解它为什么会发生,但我想得到一个解决方案。
我想让它按以下方式工作:当最后一个托管引用被释放时,在 COM 对象断开之前执行来自 Finalize sub 的代码。
我的问题是 - 有没有可能,如果是的话,我怎样才能在课堂上处理这个事件,而不需要从外部显式调用 Finalize?
非常简单的类:
Public Class ExcelRunner
Dim ExcelApplication As Excel.Application
Public Sub New()
ExcelApplication = New Excel.Application
ExcelApplication.Visible = True
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
ExcelApplication.Quit()
End Sub
End Class
此类用于表单 - 仅一行
将 ExcelRunner 调暗为 ExcelRunner = new ExcelRunner
然后我关闭表单,并收到错误。
谢谢