在Windows窗体设计器的.Designer.vb文件中创建对象时,是否会为每个对象自动生成Dispose()调用,还是必须手动完成?
具体来说,我有一个使用非托管资源的对象(通过调用ShowDialog(),需要调用在Windows窗体设计器中创建的Dispose())。我还需要在该对象上调用Dispose()吗?
注意:建议不要在同一个对象上多次调用Dispose()。
答案 0 :(得分:1)
虽然我不知道答案,但是让我告诉你如何得到答案并学习设计winforms组件的巧妙技巧(可能适用于其他人但尚未尝试过)。
假设您有一个已经引用组件的项目,请创建一个新项目并将“启动外部程序”设置为“C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe”(更改此项)基于您的Visual Studio版本,这是从2005年开始的
运行此项目,然后运行另一个VS实例。您现在已在调试模式下打开VS.现在打开用于构建/测试组件的项目(来自VS的第二个实例),设置断点并测试它。您应该能够在配置代码中看到它达到您的断点。
这非常适合测试VS加载项和设计器组件。
答案 1 :(得分:0)
这是其中一个问题,答案是“因为这是它的工作方式”,但后来你意识到你实际上并不知道它是如何实现的。所以我花了一些时间来挖掘细节。
添加到Control
集合中的任何Controls
(按钮,文本框等)都会自动为您处理。这个实现从Control
类本身一直继承。
添加到MyForm.Designer.vb文件中自动生成的components
对象的任何非图形组件(例如Timer)也会为您处理。在这种情况下,components
对象在实现System.ComponentModel.IContainer
接口时,将是处理实际Dispose的System.ComponentModel.Container
实例。