我有一个我需要多种形式的课程,所以我在模块中声明了它。
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
答案 0 :(得分:2)
这是使用ApplicationContext Class - MSDN
的示例同样,在应用程序线程终止之前可能不会调用Finalize()
,因此永远不会释放资源。
应该实现IDisposable Interface - MSDN。并在.Dispose()
上调用您对象的ApplicationExit
方法。
iDisposable易于实现,只需将: Implements iDisposable
添加到您的类声明中,智能感知将添加必要的过程。
您还可以在FormClosing
/ FormClosed
事件中处置/关闭对象。
就个人而言,我只使用Shared
成员作为函数,或者保留一些字符串变量而不是对象。
答案 1 :(得分:0)