我在图片框中使用 c# 显示图像。然后我想更改图像的名称。我不能,因为我知道该图像正被另一个进程使用。
我以这种方式打开图像
Image image1 = Image.FromFile("IMAGE LOCATION"); ;
pictureBox1.Image = image1;
然后尝试以这种方式更改其名称,我收到一个 IO 异常,说"该进程无法访问该文件,因为它正被另一个进程使用。
System.IO.File.Copy(@"OldName", @"NewName"); //copy changes name if paths are in the same folder
对象 image1 不是在保存图像吗?为什么文件仍然被上一个进程锁定?任何建议将不胜感激。非常感谢!
看看这个问题: 被新位图(文件路径)锁定的免费文件
要释放锁,您需要复制位:
Image img;
using (var bmpTemp = new Bitmap("image_file_path"))
{
img = new Bitmap(bmpTemp);
}
是的,picture box
以这种方式控制锁定磁盘上的IO
文件。
如果要重命名链接文件,可以:
-
或释放
picture box
,并在重命名文件后(如果这适用于你的应用) -
或将映像的副本/克隆分配给
picture box
。
你可以试试这个:
Image image1 = null;
using(FileStream stream = new FileStream("IMAGE LOCATION", FileMode.Open))
{
image1 = Image.FromStream(stream);
}
pictureBox1.Image = image1
;
你需要处理你的图像:
Image image1 = Image.FromFile("IMAGE LOCATION"); ;
pictureBox1.Image = image1;
image1.Dispose();
做移动。
这个解决方案解决了我的问题。 我使用了一个图片框并直接从磁盘加载其图像,而无需中间图像文件。当我完成后,我正在做一个"picturebox.dispose",这并没有释放图像文件,我无法删除它,因为"vshost正在使用的文件"。 我必须显式创建一个图像变量(IE dim MyImage 作为图像),然后首先将图像加载到图像变量中,然后将 MyImage 加载到图片框中。 通过引用图像,我可以做一个MyImage.dispose。 这关闭了vshost和图像之间的链接,我能够以编程方式删除它。