将图像设置为另一个位图后,PictureBox中的位图会发生什么情况



如果我有一些Bitmap bmp1,并将一个PictureBox.Image设置为该bmp1,然后稍后将其设置为Bitmap bmp2,那么bmp1是否由PictureBox正确处理,或者一旦我将Image更改为bmp2,我是否需要保留对它的bmp1Dispose的引用?

PictureBox不知道您是否想要处理图像——您可能正在应用程序的其他地方使用它。因此,它没有显式地Dispose。如果PictureBox保存了对它的最后一个引用,它就有资格进行垃圾回收,并且Dispose将作为终结的一部分被调用,但何时调用取决于垃圾收集器。与此同时,尚未处理的Bitmap正在消耗非托管资源,并且很可能会打开一个流,这将阻止对源文件的修改,因此"随时"清理是不好的做法。

如果你知道在更改PictureBox.Image指向的内容时你已经完成了Bitmap,那么在那里添加额外的几行来处理旧的,你就完成了:

Image tmp = myPictureBox.Image;
myPictureBox.Image = newImage;
if (tmp != null)
{
    tmp.Dispose();
}

最新更新