可以在Paint功能中创建新的Pen吗?

时间:2015-02-06 14:14:03

标签: c# paint

每次创建一个新的画笔功能称为危险吗?它会使用大量的ram吗?

那么,我应该使用哪一个?

 private void Form1_Paint(object sender, PaintEventArgs e)
 {
     e.Graphics.DrawLine(new Pen(Color.Black.....

 tpen = new Pen(Color.Black)
 private void Form1_Paint(object sender, PaintEventArgs e)
 {
     e.Graphics.DrawLine(tpen

2 个答案:

答案 0 :(得分:3)

  • 如果您不更改Pen属性,则可以使用Pens.Black,这是一个您甚至无法处置的标准Pen

  • 如果您知道只使用少量Pens,则可以在程序运行时保留它们。

  • 如果您需要创建大量或未知数量的Pens,可能需要处理绘图操作文件,请在using条款中创建它们,并且不要创建它们。担心创造它们的时间;它发生得非常快。

而且他们的存在不是关于记忆,而是关于GDI资源,这些资源有限,因此必须不泄漏..

答案 1 :(得分:2)

Pen实现了IDisposable,这意味着它应该在不再需要时立即处理掉。你不应该在DrwaLine调用中直接创建它(因为没有办法处理它)。它也不应该是类成员,假设DrawLine调用只需要

更好的方法是:

private void Form1_Paint(object sender, PaintEventArgs e)
{
    using(Pen pen = new Pen(Color.Black))
    {
        e.Graphics.DrawLine(tpen, ...);
    }
}

即使发生异常,笔也会被处理掉。

如果您设置的只是颜色,那么可以使用静态Pens.Black属性对其进行内联:

e.Graphics.DrawLine(Pens.Black, ...);

由于该对象将由Pen类缓存,您无需担心处置它。