在 PictureBox 中锁定图像文件

lock image file in PictureBox

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

myPictureBox.Image = Image.FromFile(strImageFile);

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

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

Image.FromFile 将使文件保持打开状态,这会阻止在处理图像之前访问图像文件。如果要释放锁,需要在内存中保留Image文件。

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

好吧,您可以使用 Image.FromStream 而不是 Image.FromFile 并将您正在阅读的流包装到 using 以确保它会在您完成阅读后被释放。

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

一种简单的方法是将图像从文件复制到新的 Bitmap,然后从文件中释放实例。最好使用正确的 using 结构来完成:

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

As documented 从文件中加载图像并将克隆的实例分配给图片框。

If you want to use the same image in multiple PictureBox controls, create a clone of the image for each PictureBox. Accessing the same image from multiple controls causes an exception to occur.

并且要保持文件解锁状态,仅在克隆时使用它:

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