0

当 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

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

谢谢

4

1 回答 1

0

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

于 2012-02-15T23:24:09.443 回答