我正在开发 .NET 1.1 中的 VB.NET windows 窗体项目。我有这种类型的架构,非常简单。
Public MustInherit Class BaseTestLogic
Private _TimerPoll As Timer
Public Sub New(ByVal sym As SymbolFileMng, ByVal cfg As LampTestConfig, ByVal daas As DaasManager, ByVal mcf As Elux.Wg.Lpd.MCFs.VMCF)
AddHandler _TimerPoll.Tick, AddressOf TimerPoll_Tick
End Sub
End Class
Public Class SpecificTestLogic
Inherits BaseTestLogic
End Class
根据我正在进行的测试类型,我创建一个派生于的特定测试的实例基本测试逻辑。但我发现在创建数百次对象之后我可以拥有堆栈溢出例外。
我检查了我的代码,发现我忘记了删除处理程序到定时器滴答声。问题是,何时何地删除 hadler 是正确的?
我是否需要实施I一次性基类中的接口和RemoveHandler中的Dispose?
您可能会同意在调用 Dispose 时删除处理程序,但纯粹主义者会说“除了处置非托管资源之外,您不应该滥用 IDisposable ”。
另一种选择是删除处理程序Finalize method.
如果这对您的设计有意义的话,您也可以放心地在几个不同的位置移除处理程序。删除已删除的处理程序不会导致任何问题 - 除非该事件是自定义事件并且其 AddHandler/RemoveHandler 实现与非自定义事件的行为不匹配(只需使用 [Delegate].CombineDelegate/[Delegate] 。消除)。只是不要告诉你纯粹的朋友这件事;他们不会遵守。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)