当我打电话时Dispose()
on a System.Windows.Forms.Control
,它会自动删除所有事件注册吗?
例如,以下内容就足够了:
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Dispose();
或者我是否需要显式取消注册事件处理程序,如下所示:
var button = new Button();
button.Click += someObject.clickHandler;
// ...
button.Click -= someObject.clickHandler;
button.Dispose();
Calling Dispose()
不会显式删除事件处理程序,但它确实会导致不再发送这些事件。当垃圾收集器回收内存时button
,偶数注册最终将被删除。
需要考虑的更重要的情况是button
正在列出来自其他对象的事件:
var button = new Button();
otherObject.SomeEvent += button.HandleSomeEvent;
// ...
button.Dispose();
在这种情况下,注册的事件处理程序实际上可以阻止button
收集垃圾。如果这种情况适用于您的代码,您需要删除Dispose()
方法,或使用弱事件侦听器模式来允许垃圾收集器清理这些处理程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)