2012-02-15 102 views
0

有什么办法来运行代码时,COM对象是即将从RCW断开没有实现IDisposale接口和显式调用MyObject.Dispose在客户端代码?有没有什么办法来处理COM对象从RCW断开?

下面的代码无法正常工作。当程序进入Finalize子程序时,ExcelApplication已经与RCW断开连接,并且出现错误。我明白为什么会发生,但我想得到一个解决方案。

我希望把它的工作方式如下:当最后一个托管引用被释放,COM对象断开连接之前执行从最终确定的子代码。

我的问题是 - 是否有可能在所有的,如果它是那么我该怎么处理类中这个事件,而不需要从外部显式调用敲定?

非常简单的类:

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

这听起来像你希望收到有关的RCW的通知断开它发生之前。如果是这样,不幸的是没有这样的方式来钩。你的代码需要,而不是解释,它的意外断开

+0

是的,我希望得到它发生之前通知的可能性。 – xll 2012-02-15 23:27:22

+0

@xll不幸的是,这是不可能的。 – JaredPar 2012-02-15 23:28:32

相关问题