当我创建一个表单时,自动生成的代码不包含重写的Dispose方法。这是否意味着Dispose没有被称为表单中的所有控件?Form.Dispose()是否在Dispose()中调用控件?
回答
当您在窗体上呼叫Dispose
时,它将为其Controls
集合中的每个控件调用Dispose
。这些控件反过来也会这样做,所以最终应该调用所有控件的方法Dispose
。请注意,这不是基于控件是否存在于设计者中;它基于在完成对Dispose
的调用时在表格的集合中找到的控件实例。
当我看到这种情况不会发生的唯一情况是,如果您自己创建一个容器控件并覆盖Dispose
而不将该调用传播到基类或遍历包含的控件并在其上调用Dispose
。
它应该。您可能需要查看YourForm.designer.cs文件。它看起来是这样的:
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing)
}
的base.Dispose();
通话将负责清理添加到表单控件。
这不完全正确;除非表单上有非UI组件(例如'Timer','HelpProvider'或'BackgroundWorker'),否则'components'字段为'null'。 '组件'处理这些组件。它不*调用处理其他控件,如按钮,文本框等。 – 2010-09-08 19:13:24
确切地说,表单的控件实际上是通过调用'base.Dispose()',即在'Control.Dispose()'内部处理的。实际上有更多的清理,正如您在使用Reflector查看“Form.Dispose()”时所看到的那样。 – 2010-09-08 19:20:12
更新,感谢您的意见 – SwDevMan81 2010-09-08 19:26:46
- 1. 是否会自动调用Dispose?
- 2. form.dispose()总是调用验证事件并显示弹出消息
- 3. 在表单中调用Dispose
- 4. 在调用Dispose之前,是否需要关闭SqlDataReader?
- 5. 在.Set之后直接调用.Close(.Dispose)EventWaitHandle是否安全?
- 6. 我是否必须在FolderBrowserDialog上调用Dispose方法?
- 7. 我是否需要在托管对象上调用Dispose()?
- 8. Form.Dispose()方法内的安全调用
- 9. System.ComponentModel.Component上的Dispose方法是否释放事件回调?
- 10. 用户控件不处理时调用Dispose
- 11. C#Form.Close vs Form.Dispose
- 12. 避免显式调用Dispose()是否合理?
- 13. 我是否需要调用.dispose()(javax.jcr.Binary)和.close()(java.io.InputStream)?
- 14. 我实际上是否需要调用FileStream.Close/Dispose
- 15. 为什么我需要调用ASP.NET控件上的dispose?
- 16. 是否存在微调的ActiveX控件?
- 17. 是否可以通过反射来检查类型是否在使用块中(调用Dispose)
- 18. 如果Dispose()被Finalizer调用,您能否触发“Disposing”事件?
- 19. 从事件处理程序的实例调用Dispose是否安全?
- 20. 在C#中调用Dispose(IsDisposing)模式的目的是什么?
- 21. 是否可以在IE ActiveX控件中调用Chrome Frame
- 22. InvalidAsynchronousStateException在函数中检查控件是否需要调用
- 23. Android微调控件onselecteditem微调控件是否为空?
- 24. 当调用Dispose()在WPF应用程序
- 25. 为什么Dispose被调用?
- 26. 当调用Dispose可观察
- 27. WCF Dispose()未调用InstanceContectMode = PerSession
- 28. ViewModel Dispose不被调用
- 29. 在WindowsIdentity对象上调用Dispose()? C#
- 30. 应该在ReaderWriterLockSlim锁上调用Dispose()吗?
是的。组件的执行方式不同,这就是自动生成的Dispose()方法所要处理的内容。从Controls集合中删除控件并且不处理它是一种很好的泄漏方法。 – 2010-09-08 19:48:30