当COM对象与RCW断开连接时,有什么方法可以处理吗
本文关键字:方法 什么 处理 对象 COM RCW 连接 断开 | 更新日期: 2023-09-27 18:24:41
当COM对象将要从RCW断开连接时,如果不在客户端代码中实现IDisposale接口和显式调用MyObject.Dispose,有什么方法可以运行代码吗?
下面的代码不起作用。当程序进入Finalize sub时,ExcelApplication已经和RCW断开连接,我得到了错误。我理解为什么会发生这种情况,但我想找到一个解决方案。
我想让它以以下方式工作:当最后一个托管引用被释放时,Finalize子对象中的代码在COM对象断开连接之前执行。
我的问题是,这可能吗?如果可能,我如何在类内部处理此事件,而不需要从外部显式调用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
该类用于表单-仅为单行
Dim ExcelRunner as ExcelRunner=新的ExcelRunner
然后我关闭表单,收到错误。
感谢
听起来你想在RCW断开连接之前收到一个通知。不幸的是,如果是这样的话,就没有这样的方法了。您的代码需要考虑到它意外断开的可能性