当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

然后我关闭表单,收到错误。

感谢

当COM对象与RCW断开连接时,有什么方法可以处理吗

听起来你想在RCW断开连接之前收到一个通知。不幸的是,如果是这样的话,就没有这样的方法了。您的代码需要考虑到它意外断开的可能性