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

时间:2012-02-15 23:10:54

标签: c# vb.net excel com rcw

当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

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

由于

1 个答案:

答案 0 :(得分:0)

听起来您希望收到有关RCW在发生之前断开连接的通知。如果是这样的话,遗憾的是没有这种方法可以解决这个问题。您的代码需要考虑其意外断开连接的可能性