【发布时间】:2011-01-13 14:32:40
【问题描述】:
从内存的角度来看(使用后删除添加的处理程序等),WithEvents 和 Handles 的使用是否优于 RemoveHandler 和 AddHandler?
一个相关的 Stack Overflow 问题是 Event handler and memory leaks。
【问题讨论】:
标签: vb.net event-handling
从内存的角度来看(使用后删除添加的处理程序等),WithEvents 和 Handles 的使用是否优于 RemoveHandler 和 AddHandler?
一个相关的 Stack Overflow 问题是 Event handler and memory leaks。
【问题讨论】:
标签: vb.net event-handling
取决于你真正在做什么,如果你想动态附加/分离事件处理程序,那么使用 AddHandler/RemoveHandler 是解决它的方法,否则使用 Handles 是非常好的。
【讨论】:
这取决于您要达到的目标。如果您有多个事件处理程序必须在表单/对象的生命周期内处理各种控件的事件,那么 WithEvents 和 Handles 是最简单的方法。在设置活动方面,该语言将为您完成所有繁琐的工作。另一方面,如果您倾向于在表单的生命周期内断开与事件的连接,那么 AddHandler 和 RemoveHandler 是更好的选择。
【讨论】:
在适用的情况下,我更喜欢 WithEvents/Handles,因为它更好地表达了代码应该做什么。对“WithEvents/Handles”的一个警告是,任何从寿命较长的对象接收事件的对象都应该实现 IDisposable,并且在处理它时应该将其所有 WithEvents 变量设置为 Nothing,以确保所有事件都是未连接的。使用 AddHandler/RemoveHandler 时分离事件是必要的,但可能更明显。使用 WithEvents 时更容易忘记。
顺便说一句,我不知道有什么方法可以自动将所有 WithEvents 变量设置为 Nothing。这似乎是一个足够普遍的要求,但无论出于何种原因,Microsoft 都没有在 VB 中包含这样的功能。
【讨论】: