我应该在创建之前处置GDI +对象吗?

时间:2010-03-17 15:16:59

标签: .net gdi+ drawing

我应该在创建之前处置GDI +对象吗?

建议在使用后始终使用Dispose GDI +对象。

例如

Pen p = new Pen(Color.Green);
// use 'p'
p.Dispose();

现在,如果我遇到这种情况:

Pen p = new Pen(Color.Green);
// use green 'p'

p = new Pen(Color.Red); // Should I Dispose my 'p' first?
// use red 'p'

p.Dispose();

编辑A:

每次都不可能使用'USING'。

private Pen p;

public RefreshPen(style)
{
    // p.Dispose(); +-
    p = new Pen(style.Color);
    // etc.
}

编辑B:

这样可以吗?

using (Pen p = new Pen(Color.Green))
{
    // use green 'p'

    p = new Pen(Color.Red); // Should I Dispose my 'p' first?
    // use red 'p'

    p = new Pen(Color.Blue); // Should I Dispose my 'p' first?
    // use blue 'p'
}

3 个答案:

答案 0 :(得分:3)

是的,你应该。 (另请注意,using语句在这里是一个非常有用的帮助。我非常很少调用.Dispose显式。using负责处理。)

答案 1 :(得分:1)

是。您正在创建一个新对象并将其分配给p,这意味着您应该处置旧对象。

我可能会这样编码:

using(Pen p = new Pen(Color.Green))
{
    //do some stuff
}

using(Pen q = new Pen(Color.Red))
{
    //do some other stuff
}

这可以防止您忘记丢弃笔或使用处理过的物体。

答案 2 :(得分:1)

你不能只改变对象的属性吗?

Pen p = new Pen(Color.Green);
//use it here.
p.Color = Color.Red;
//use it some more.
p.Dispose();