我负责处理背景图像吗?

时间:2009-10-19 22:21:02

标签: c# .net winforms dispose idisposable

我有一个Windows窗体,我将BackgroundImage属性设置为自定义位图图像。

private Image MakeCustomBackground()
{
    Bitmap result = new Bitmap(100, 100);

    using(Graphics canvas = Graphics.FromImage(result))
    {
        // draw the custom image
    }

    return result;
}

private void UpdateFromBackground()
{
    this.BackgroundImage = MakeCustomBackground();
}

我的问题是,图像是一次性的,我正在创造它,这是否意味着我必须处理它?或者当我通过BackgroundImage将图像传递给表单时,是否需要所有权并在不再需要时将其丢弃?

1 个答案:

答案 0 :(得分:5)

假设UpdateFromBackground()被多次调用,您可能应该在(之前)设置新的时间之前处理图像。如果你不这样做,那么GC最终会做到,但效率会降低。表格将仅处理您指定的最后一个BgImage。

private void UpdateFromBackground()
{
    if (this.BackgroundImage != null)
    {
       this.BackgroundImage.Dispose();
    }
    this.BackgroundImage = MakeCustomBackground();
}