.NET& COM - Class_Terminate /当对象超出范围时处置它

时间:2009-03-05 21:00:21

标签: .net com vb6 asp-classic

我的理解是,对于VB6 COM对象,当它超出范围时,会立即调用该对象以允许它清理。

是否可以为COM调用的.NET对象提供相同的功能?

问题的背景基于MSDN文章:http://msdn.microsoft.com/en-us/library/aa479313.aspx

这将使用自定义对象替换ASP页面中的Session对象,该对象在页面完成后通过使用Class_Terminate将会话信息序列化回数据库。

我想在.NET中实现该对象,但是因为GC不会立即调用终结器,所以它有点问题,因为我不想等待对象被清除之前被序列化回数据库。

我可以实现IDisposiable并在完成Session时手动调用Dispose(),但这需要更改每个现有的ASP经典页面,而不是只能在标准包含文件中包含几行。

那么有没有办法自动调用代码来完成页面完成时所需的工作? :)

1 个答案:

答案 0 :(得分:3)

团。将.NET COM类包装在一个shell的VB6 Com类中,并包装在包装器调用dispose的Class_Terminate事件中。

如果您不想重新实现VB6 COM类中的整个界面,那么您可以执行类似

的操作
Public MyNETCOMObject as MyNETCOMObject

Private Class_Initialize()
  Set MyNETCOMObject = New MyNetCOMObject
End Sub

Private Class_Terminate()
  If Not MyNETCOMObject = Nothing then MyNETCOMObject.Dispose
  Set MyNETCOMObject = Nothing
End Sub