我是否需要使用Font,Brush等模式

时间:2010-12-28 14:00:19

标签: c# .net gdi+ gdi

使用GDI +编程时,我是否需要坚持使用模式来处理各种对象,如Brush,Font,它会使代码变得非常混乱。

有什么建议吗?

4 个答案:

答案 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

请参阅以前关于此主题的答案:

What Happens if I Don't Call Dispose

Wrapping MemoryStream in a using

答案 2 :(得分:2)

如果您使用new创建了画笔,则应将其丢弃。

如果你从Brushes系列中获得了刷子,请不要丢弃它。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.drawing.brushes.aspx的备注部分。

字体也是如此,如果你用new创建它,处理它。如果你从其他方面得到它,请查看文档,看看是否应该处理它。

答案 3 :(得分:1)

是的,你必须这样做。

替代方案是使用默认画笔和字体,例如Brushes.Black,...