我负责处理BackgroundImage吗?

Kep*_*boy 1 .net c# dispose idisposable winforms

我有一个窗体,我将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();
}

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

Hen*_*man 6

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

private void UpdateFromBackground()
{
    if (this.BackgroundImage != null)
    {
       this.BackgroundImage.Dispose();
    }
    this.BackgroundImage = MakeCustomBackground();
}
Run Code Online (Sandbox Code Playgroud)