为什么ByRef不能与WithEvents一起使用



我想我很清楚VB中ByValByRef之间的区别,但我的问题是当我尝试将它与用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的调用将按预期工作(但显然无法处理事件)

有人能向我解释为什么会发生这种事吗?

附言:我在其他地方也发现了类似的问题,但变通方法在我的场景中不起作用。

也许调用:

Set Connection = Nothing

SafeCloseAndDeRefConnection(Connection) 之后

这将强制销毁对象,而不依赖VB6为您做这件事!

相关内容

  • 没有找到相关文章

最新更新