2009-03-05 28 views
1

據我瞭解,對於VB6 COM對象超出範圍時,立即在對象上調用Class_Terminate以清除對象。.NET&COM - Class_Terminate /丟棄超出範圍的對象

是否有可能爲COM正在調用的.NET對象具有相同的功能?

背景的問題是基於MSDN文章:http://msdn.microsoft.com/en-us/library/aa479313.aspx

這與儘快序列化會話信息返回到數據庫,通過該頁面完成自定義對象替換Session對象在ASP頁利用Class_Terminate。

我想在.NET中實現對象,但是由於GC不會立即調用終結器,所以這有點麻煩,因爲我不想等待對象被清理在序列化回數據庫之前。

我可以實現IDisposiable並在完成會話時手動調用Dispose(),但這需要更改每個現有的ASP經典頁面,而不僅僅是能夠在標準包含文件中包含幾行。

那麼有沒有辦法自動調用代碼來完成頁面完成後所需的工作? :)

回答

3

代表團。將.NET COM類封裝在作爲外殼的VB6 Com類中以及包裝調用的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