当COM对象即将从RCW断开而没有实现IDisposale接口并在客户端代码中显式调用MyObject.Dispose时,有没有办法运行代码?
以下代码无效。当程序进入Finalize sub时,ExcelApplication已经与RCW断开连接,我收到错误。我明白为什么会这样,但我想得到一个解决方案。
我想让它以下列方式工作:当发布最后一个托管引用时,在断开COM对象之前执行Finalize子代码。
我的问题是 - 它是否可能,如果是,那么如何在类中处理此事件,而无需从外部显式调用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 =新的ExcelRunner
然后我关闭表单,并收到错误。
由于
答案 0 :(得分:0)
听起来您希望收到有关RCW在发生之前断开连接的通知。如果是这样的话,遗憾的是没有这种方法可以解决这个问题。您的代码需要考虑其意外断开连接的可能性