锁定PictureBox中的图像文件

问题描述 投票:0回答:5

我将图像加载到图片框中:

myPictureBox.Image = Image.FromFile(strImageFile);

并且工作完美,但是图像文件被锁定,在我的应用程序关闭之前我无法管理..

我需要从程序的另一个窗口保存一个新图像,以便在关闭该子窗口时重新加载..

c# winforms picturebox
5个回答
5
投票

Image.FromFile
将使文件保持打开状态,从而阻止访问图像文件,直到图像被处理为止。如果要释放锁,需要将Image文件保留在内存中。

myPictureBox.Image = Image.FromStream(new MemoryStream(File.ReadAllBytes(strImageFile)));

1
投票

一种简单的方法是将图像从文件复制到新的

Bitmap
,然后从文件中处理实例。这最好通过正确的 using 结构来完成:

using(var fromFile = Image.FromFile(strImageFile))
{
    myPictureBox.Image = new Bitmap(fromFile);
}

1
投票

记录从文件加载图像并将克隆实例分配给图片框。

如果要在多个 PictureBox 控件中使用相同的图像,请为每个 PictureBox 创建图像的克隆。从多个控件访问同一图像会导致发生异常。

要保持文件解锁,只需在克隆时间使用它即可:

using ( var img = Image.FromFile( fileName ) )
{
    pictureBox2.Image = (Image) img.Clone();
}

0
投票

好吧,您可以使用

Image.FromStream
代替
Image.FromFile
并将您正在读取的流包装到
using
中,以确保它会在您读完后被释放。

using (var stream = File.Open(strImageFile, FileMode.Open))
{
     myPictureBox.Image = Image.FromStream(stream);
}

0
投票

我的经验表明 PictureBox.LoadAsync 似乎没有锁定文件。我什至可以使用 IO.FileInfo.Delete 删除这样的文件,同时它仍然显示在 PictureBox 中。我没有做过系统的研究,但我建议尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.