我有如下代码:
Bitmap b = new Bitmap(...); //doesn't matter how this image is constructed
pictureBox1.Image = b;
//b.Dispose() placed here crashes the application and so does "using" if used on the declaration of 'b'
由于在C#中,您应该处置所有IDisposable
,因此需要在某个时刻处置此图像。看来属性PictureBox.Image
只能进行浅拷贝,因此在整个图像停留在框内的整个过程中,我都需要使对象保持活动状态(又不是该对象的Dispose()
)。如果以后再更改框中的图像:
pictureBox1.Image = b2;
该物业会为我处置吗?还是我应该手动进行:
Image im = pictureBox1.Image;
pictureBox1.Image = b2;
im.Dispose();
答案 0 :(得分:1)
是的...如果您更改.Image
属性,则以前的图像将被自动清除。
如果您完全确定不再需要以前的图像,可以将其分配给一个临时变量,将一个新的图像分配给您的图片框,然后处置temp变量:
Image tmp = pictureBox1.Image;
pictureBox1.Image = b2;
tmp.Dispose();