如果我在使用 AddHandler 之后总是需要调用 RemoveHandler,那么最好的位置在哪里?
我搜了几个类似的问题如下,但不太明白。
When and where to call the RemoveHandler in VB.NET?
AddHandler/RemoveHandler Not Disposing Correctly
我认为 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
非常感谢!
最佳答案
If I always need to call RemoveHandler after using AddHandler, where is the best place to do so
您不一定必须这样做。
如果您的源对象(具有事件的对象)的生命周期将超过您的订阅者,那么您通常只需要担心调用RemoveHandler。如果您在表单中工作,那么表单的处理将阻止源再引发事件,并且两个对象都将超出范围并(最终)被垃圾收集,因此您不会有任何问题。 p>
如果您从某个其他对象订阅长生命周期对象上的事件,而该对象将在长生命周期对象之前“消失”,则此问题会更严重。即使使用垃圾收集器,这也可能导致内存泄漏。在这种情况下,您需要在监听完事件后调用RemoveHandler。不过,对于何时发生这种情况没有单一的指导,因为这取决于相关事件和您的应用程序逻辑。
关于vb.net - 在vb.net中,如果我使用AddHandler,我是否必须使用RemoveHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436024/