我将图像加载到图片框中:
myPictureBox.Image = Image.FromFile(strImageFile);
和工作完美,但图像文件被锁定,我无法管理,直到我的应用程序关闭。我需要,从程序的另一个窗口,保存一个新的图像重新加载时,这个子窗口关闭。
velaa5lx1#
Image.FromFile将使文件保持打开状态,以防止在映像被释放之前访问映像文件。如果要释放锁定,则需要将映像文件保留在内存中。
Image.FromFile
myPictureBox.Image = Image.FromStream(new MemoryStream(File.ReadAllBytes(strImageFile)));
d6kp6zgx2#
一种简单的方法是将映像从文件复制到一个新的Bitmap,然后从文件中释放示例。最好使用适当的using构造来完成这一操作:
Bitmap
using(var fromFile = Image.FromFile(strImageFile)) { myPictureBox.Image = new Bitmap(fromFile); }
lrpiutwd3#
以documented的形式从文件中加载图像,并为图片框分配一个克隆示例。如果要在多个PictureBox控件中使用相同的图像,请为每个PictureBox创建图像的克隆。从多个控件访问相同的图像会导致发生异常。要使文件保持解锁状态,只需在克隆时间内使用该文件:
using ( var img = Image.FromFile( fileName ) ) { pictureBox2.Image = (Image) img.Clone(); }
nzk0hqpo4#
您可以使用Image.FromStream而不是Image.FromFile,并将您正在阅读流 Package 到using中,以确保它在您读取完后将被释放
Image.FromStream
using
using (var stream = File.Open(strImageFile, FileMode.Open)) { myPictureBox.Image = Image.FromStream(stream); }
4条答案
按热度按时间velaa5lx1#
Image.FromFile
将使文件保持打开状态,以防止在映像被释放之前访问映像文件。如果要释放锁定,则需要将映像文件保留在内存中。d6kp6zgx2#
一种简单的方法是将映像从文件复制到一个新的
Bitmap
,然后从文件中释放示例。最好使用适当的using构造来完成这一操作:lrpiutwd3#
以documented的形式从文件中加载图像,并为图片框分配一个克隆示例。
如果要在多个PictureBox控件中使用相同的图像,请为每个PictureBox创建图像的克隆。从多个控件访问相同的图像会导致发生异常。
要使文件保持解锁状态,只需在克隆时间内使用该文件:
nzk0hqpo4#
您可以使用
Image.FromStream
而不是Image.FromFile
,并将您正在阅读流 Package 到using
中,以确保它在您读取完后将被释放