2011-04-12 94 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代碼將被正好一次運行中,在端部應用程序域生存期。