0

当从 Windows 窗体设计器的 .Designer.vb 文件中创建对象时,是为每个对象自动生成 Dispose() 调用还是必须手动完成?

具体来说,我有一个使用非托管资源的对象(通过调用 ShowDialog(),需要调用 Dispose()),该对象是在 Windows 窗体设计器中创建的。我还需要在该对象上调用 Dispose() 吗?

注意:建议不要对同一个对象多次调用 Dispose()。

4

2 回答 2

1

虽然我不知道答案,但让我告诉您如何获得答案并学习为 winforms 设计组件的巧妙技巧(可能对其他人有用,但尚未尝试过)。

假设您有一个项目已经引用了您的组件,创建一个新项目并将“启动外部程序”设置为“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe”(根据您的视觉工作室版本,这是从 2005 年开始的)

运行这个项目,然后它将运行另一个 VS 实例。您现在已经在调试模式下打开了 VS。现在打开您用于构建/测试组件的项目(来自 VS 的第二个实例),设置断点并对其进行测试。您应该能够看到它在 dispose 代码中达到了您的断点。

这对于测试 VS 插件和设计器组件非常有用。

于 2013-09-25T19:26:50.353 回答
0

这是其中一个问题的答案是“因为这就是它的工作方式”,但是你意识到你实际上并不知道它是如何实现的。所以我花了一些时间来挖掘细节。

添加到集合中的任何(按钮、文本框等)都会自动为您处理Control。这个实现是从类本身 Controls继承回来的。Control

components添加到MyForm.Designer.vb 文件中自动生成的对象的任何非图形组件(例如 Timer)也会为您处理。在这种情况下,components对象在实现System.ComponentModel.IContainer接口时将是System.ComponentModel.Container处理实际 Dispose 的实例。

于 2013-09-26T12:09:29.957 回答