【发布时间】:2010-12-21 14:29:57
【问题描述】:
我最近遇到了this VerticalLabel control on CodeProject。
我注意到 OnPaint 方法创建但不处理 Pen 和 SolidBrush 对象。
这重要吗?如果重要,我如何证明它可能导致的任何问题?
编辑
这不是关于 IDisposable 模式的一般问题。我了解调用者通常应该在任何实现 IDisposable 的类上调用 Dispose。
我想知道的是,当 GDI+ 对象没有像上面的例子那样被处理时,会出现什么问题(如果有的话)。很明显,在链接的示例中,可能会在垃圾收集器启动之前多次调用 OnPaint,因此可能会耗尽句柄。
但是我怀疑 GDI+ 在某些情况下会在内部重用句柄(例如,如果您使用 Pens 类中特定颜色的笔,它会被缓存并重用)。
我想了解的是,链接示例中的类似代码是否能够避免忽略调用 Dispose。
如果不是,请查看一个示例,说明它可能导致什么问题。
我应该补充一点,我经常 (including the OnPaint documentation on MSDN) 看到无法处理 GDI+ 对象的 WinForms 代码示例。
【问题讨论】:
-
是的,不幸的是,许多 MSDN 示例仍然无法处理钢笔和画笔。
标签: .net winforms idisposable