5

我想我很清楚VBByValByRefVB 之间的区别是什么,但我的问题是当我尝试将它与声明为WithEvents.

我有以下方法:

Private Sub SafeCloseAndDeRefConnection(ByRef cnx As ADODB.Connection)
On Error GoTo ErrH
    If Not cnx Is Nothing Then
        If (cnx.State And adStateConnecting) = adStateConnecting Then
            cnx.Cancel
        End If

        If (cnx.State And adStateOpen) = adStateOpen Then
            cnx.Close
        End If

        Set cnx = Nothing
    End If
Exit Sub
ErrH:
 Set cnx = Nothing
End Sub

如果我有一个这样声明的类成员:

Private WithEvents Connection As ADODB.Connection

然后我想关闭连接,然后这样调用它:

SafeCloseAndDeRefConnection Connection

SafeCloseAndDeRefConnection但是在调用Connection变量后没有设置为Nothing并且仍然有它的原始引用。

如果我删除WithEvents关键字,调用SafeCloseAndDeRefConnection按预期工作(但显然事件不能被处理)

谁能向我解释为什么会这样?

PS我在其他地方发现了一个类似的问题,但解决方法在我的场景中不起作用。

4

1 回答 1

0

也许打电话:

Set Connection = Nothing

SafeCloseAndDeRefConnection(Connection)

这将强制销毁对象,而不是依靠 VB6 为您完成!

于 2015-05-08T23:16:14.377 回答