如何在VB.NET中配置共享变量

时间:2011-04-12 10:06:26

标签: .net vb.net

如何在vb.net中配置共享变量

我正在使用Asterisk.NET Manager变量的共享对象,我在表单加载中分配了它 我把它放在主窗口关闭,我的问题是关闭应用程序后,application.exe保持在任务管理器中,如果我没有在表单加载中初始化共享对象没有问题,

我的代码处于打开状态

  Public Shared WithEvents objManager As Asterisk.NET.Manager.ManagerConnection

  Public Shared Sub ConnectAsterisk()
    Try
        objManager = New Asterisk.NET.Manager.ManagerConnection(ELASTIX_IP_ADDRESS, ASTERISK_PORT, ASTERISK_USER_NAME, ASTERISK_PASSWORD)
        objManager.Login()            
    Catch ex As Exception

    End Try
End Sub



 Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    AsteriskManager.objManager = Nothing
End Sub

任何人都可以帮忙做到这一点

谢谢, 塞特希

3 个答案:

答案 0 :(得分:2)

我认为问题不在于处理ManagerConnection。 Asterisk.NET Manager不实现IDisposable。 你必须注销。

objManager.Logoff();

对于vb.net将是

objManager.Logoff()

然后销毁参考:

objManager = Nothing

答案 1 :(得分:1)

您声称要处置它,但我在您的代码中没有看到它。 如果它实现Dispose,您可以在其上调用IDisposable

答案 2 :(得分:1)

如果您在Closing事件中处置资源,则会在任何表单关闭后立即处理该资源。这可能对你有用,但如果你的资源是Shared,那么它在概念上是错误的。

从变量中删除Shared限定符或实现“static finalizer”习惯用法删除在应用程序生命周期结束时处置资源:

' *In* frmMain.vb:

Private Shared Finalizer As New SharedFinalizer()

Private Class SharedFinalizer
    Protected Overrides Sub Finalize()
        MyBase.Finalize()
        objManager.Logoff()
    End Sub
End Class

SharedFinalizer.Finalize代码将在应用程序域生命周期结束时运行一次。