Finalize不会被公开声明的类调用

时间:2014-06-03 20:50:27

标签: vb.net class dispose

我有一个我需要多种形式的课程,所以我在模块中声明了它。

Module modTTS

    Public g_TTS As clsTTS

End Module

我在这个课程中有一个Finalize方法:

Protected Overrides Sub Finalize()

    Stop'this is never called. I don't know why

    MyBase.Finalize()

End Sub

当我的程序结束时,我没有明确地破坏课程。 我只想默默地让它超出范围。 这是无效的吗?可能是什么原因导致Finalize程序没有被调用?

谢谢!

根据建议,我已将课程改为:

Public Class clsTTS:实现IDisposable

Private _Synth As New SpeechSynthesizer
Private _bDisposed As Boolean = False

' Public implementation of Dispose pattern callable by consumers. 
Public Sub Dispose() Implements IDisposable.Dispose

    Dispose(True)
    GC.SuppressFinalize(Me)

End Sub

' Protected implementation of Dispose pattern. 
Protected Overridable Sub Dispose(ByVal uDisposing As Boolean)

    If _bDisposed Then
        Return
    End If

    If uDisposing Then
        ' Free any other managed objects here. 
        If Not _Synth Is Nothing Then
            _Synth.Dispose()
        End If
    End If

    ' Free any unmanaged objects here. 
    _bDisposed = True

End Sub

2 个答案:

答案 0 :(得分:2)

这是使用ApplicationContext Class - MSDN

的示例

同样,在应用程序线程终止之前可能不会调用Finalize(),因此永远不会释放资源。

应该实现IDisposable Interface - MSDN。并在.Dispose()上调用您对象的ApplicationExit方法。

iDisposable易于实现,只需将: Implements iDisposable添加到您的类声明中,智能感知将添加必要的过程。

您还可以在FormClosing / FormClosed事件中处置/关闭对象。

就个人而言,我只使用Shared成员作为函数,或者保留一些字符串变量而不是对象。

答案 1 :(得分:0)