我负责处理 BackgroundImage 吗?
Posted
技术标签:
【中文标题】我负责处理 BackgroundImage 吗?【英文标题】:Am I responsible for Disposing a BackgroundImage? 【发布时间】:2010-12-08 04:00:28 【问题描述】:我有一个 Windows 窗体,我将 BackgroundImage 属性设置为自定义位图图像。
私人图像 MakeCustomBackground() 位图结果 = 新位图 (100, 100); 使用(图形画布 = Graphics.FromImage(结果)) // 绘制自定义图像 返回结果; 私人无效UpdateFromBackground() this.BackgroundImage = MakeCustomBackground();我的问题是,图像是一次性的,我正在创建它,这是否意味着我必须处理它?或者当我通过 BackgroundImage 将图像传递给表单时,它是否会取得所有权并在不再需要它时将其丢弃?
【问题讨论】:
【参考方案1】:假设UpdateFromBackground()
被多次调用,您可能应该在设置新图像时(之前)处理旧图像。如果你不这样做,那么 GC 最终会这样做,但效率较低。该表单只会处理您分配的最后一个 BgImage。
private void UpdateFromBackground()
if (this.BackgroundImage != null)
this.BackgroundImage.Dispose();
this.BackgroundImage = MakeCustomBackground();
【讨论】:
一旦你覆盖了 BackgroundImage 属性,假设没有其他对 Image 实例的引用,GC 最终会像 Henk 所说的那样处理它。我想强调的是,控件没有明确处理该实例,因此最好自己处理它。您可以使用两个不同的变量 imageA 和 imageB 对此进行测试,每个变量都设置为不同的 Image 实例。将 BackgroundImage 设置为 imageA,然后设置为 imageB,然后测试 imageA 是否已被释放 - 你会发现它没有被释放。以上是关于我负责处理 BackgroundImage 吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 OpenOCD 来识别负责使用 stm32f4 处理器的设备上的用户触发功能的指令吗?
UIButton 的 backgroundImage 的内容模式不受尊重