如何在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
任何人都可以帮忙做到这一点
谢谢, 塞特希
答案 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
代码将在应用程序域生命周期结束时运行一次。