如果我有一些Bitmap bmp1
并为此PictureBox.Image
设置了bmp1
,那么稍后将其设置为Bitmap bmp2
,bmp1
会被PictureBox
正确处理掉{1}}或者,当我将bmp1
更改为Dispose
后,是否需要继续引用Image
和bmp2
?
答案 0 :(得分:4)
PictureBox
无法知道您是否要处置图像 - 您可能正在应用中的其他位置使用它。所以它没有明确Dispose
它。如果PictureBox
持有对它的最后一个引用,它就有资格进行垃圾收集,并且Dispose
将作为最终化的一部分被调用,但是当发生这种情况时,由垃圾收集器决定。与此同时,尚未处置的Bitmap
正在消耗非托管资源,并且很可能会打开一个流来阻止对源文件进行修改,因此,“无论什么时候”都是不好的做法,让事情得到清理。
如果您知道在更改Bitmap
指向的PictureBox.Image
时已完成Image tmp = myPictureBox.Image;
myPictureBox.Image = newImage;
if (tmp != null)
{
tmp.Dispose();
}
,请在此处添加额外的几行以处理旧的行,并且您已完成:
{{1}}