2011-04-12 98 views
0

如何处置共享变量在vb.net如何处置共享变量在VB.NET

我使用Asterisk.NET管理器变量的共享对象,i的形式负载 分配它,我处置它在主要形式结束,我的问题是关闭应用程序后,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 

可以帮助任何一个d但愿

感谢, 塞特希

回答

2

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

objManager.Logoff(); 

对vb.net将

objManager.Logoff() 

,然后摧毁参考:

objManager = Nothing 
+2

“摧毁参考”在这里没有意义。在这种情况下这是无用的操作。 – 2011-04-12 10:41:33

+0

感谢LeftyX,你是确切的 – Senthil 2011-04-12 10:44:13

1

您要求处置它,但我不明白,在你的代码。 如果它实现了IDisposable,你可以在它上面调用Dispose

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代码将被正好一次运行中,在端部应用程序域生存期。