c#文件关闭连接的图像

我在pictureBox中使用c#显示图像。 然后我想改变图像的名称。 我不能,因为我得到了另一个进程正在使用的图像。

我这样打开图像

Image image1 = Image.FromFile("IMAGE LOCATION"); ; pictureBox1.Image = image1; 

然后尝试以这种方式更改它的名称,我得到一个IOexception,说“进程无法访问该文件,因为它正被另一个进程使用。

 System.IO.File.Copy(@"OldName", @"NewName"); //copy changes name if paths are in the same folder 

对象image1不是持有图像吗? 为什么文件仍然被前一个进程锁定? 任何建议,将不胜感激。 非常感谢!

看看这个问题: 新的Bitmap(filePath)锁定了免费文件

要释放锁,您需要复制这些位:

 Image img; using (var bmpTemp = new Bitmap("image_file_path")) { img = new Bitmap(bmpTemp); } 

是的, picture box控制以这种方式锁定磁盘上的IO文件。

如果要重命名链接文件,可以:

  • 或配置picture box ,并重命名文件后(如果这适合您的应用程序)

  • 或者为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和图像之间的链接,我能够以编程方式删除它。