在vb.net中,如果我使用AddHandler,我是否必须使用RemoveHandler?

Sum*_*mer 7 vb.net memory-management

如果我总是需要在使用AddHandler之后调用RemoveHandler,那么最好的位置在哪里?

我已经搜索了几个类似的问题如下,但我不太明白.

何时何地在VB.NET中调用RemoveHandler?

AddHandler/RemoveHandler未正确处置

我认为c#或vb.net中的垃圾收集会处理未使用的对象.此外,在vb.net设计器中,它会自动生成Dispose Sub.所以我根本不注意以编程方式释放资源.我有任何内存泄漏问题吗?请为我提供一些链接/文件,让我开始学习.

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Ree*_*sey 11

如果我总是需要在使用AddHandler之后调用RemoveHandler,那么最好的地方就是这样做

你不一定要这样做.

如果源对象(具有事件的对象)将超过您的订阅者,您通常只需要担心调用RemoveHandler.如果你在一个表单中工作,那么表单被处理将阻止源再次引发事件,并且这两个对象将超出范围并且(最终)被垃圾收集,因此你没有问题.

如果您长期存在的对象之前的某个其他对象上订阅一个长期存在的对象上的事件,则会出现此问题.即使使用垃圾收集器,这也可能导致内存泄漏.在这种情况下,您需要在听完事件后调用RemoveHandler.但是,对于何时发生这种情况,没有单一的指导,因为它取决于相关事件和您的应用程序逻辑.