使用GDI +编程时,我是否需要坚持使用模式来处理各种对象,如Brush,Font,它会使代码变得非常混乱。
有什么建议吗?
答案 0 :(得分:6)
是的,您应该为您创建的所有(IDisposable)对象执行此操作。
例外是库存对象(Brushes.Blue,Pens.Black,e.Graphics,...),因为您不创建它们。
它可以使代码变得非常混乱。
using
并不像完整的尝试/最终那样混乱。请注意,您可以节省嵌套:
using (Pen p = ...)
using (Brush b = ...)
{
// draw with p and b
}
但如果选择是在杂乱的代码或程序失败的可能性之间,是否真的有选择?
答案 1 :(得分:3)
是的,你应该。这些对象可能包含需要正确处理的非托管资源(例如,GDI +句柄)。因此,使用using
块或将所有内容包装在try / finally
语句中,在finally
块中调用IDisposable.Dipose
。
请参阅以前关于此主题的答案:
答案 2 :(得分:2)
如果您使用new创建了画笔,则应将其丢弃。
如果你从Brushes系列中获得了刷子,请不要丢弃它。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.drawing.brushes.aspx的备注部分。
字体也是如此,如果你用new创建它,处理它。如果你从其他方面得到它,请查看文档,看看是否应该处理它。
答案 3 :(得分:1)
是的,你必须这样做。
替代方案是使用默认画笔和字体,例如Brushes.Black
,...