【问题标题】:error when i'm trying to delete an image used in a picturebox尝试删除图片框中使用的图像时出错
【发布时间】:2020-01-05 07:54:18
【问题描述】:

我正在使用 Visual Studio 2013 创建一个 c# windows 应用程序,但我遇到了这个错误。

当我尝试删除我一直在图片框中使用的图像时,会出现此错误消息..:

System.IO.IOException:进程无法访问文件 'C:\Users\ALI PC\Documents\My Projects\Doctor Clinic\Doctor Clinic\Images\1.jpg',因为它正被另一个进程使用。
在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess 访问、Int32 权限、布尔用户权限、FileShare 共享、Int32 bufferSize,FileOptions 选项,SECURITY_ATTRIBUTES secAttrs,字符串 msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
在 System.IO.FileStream..ctor(字符串路径,FileMode 模式,FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项、字符串 msgPath, Boolean bFromProxy) 在 System.IO.FileStream..ctor(String 路径,文件模式模式)在 Doctor_Clinic.Forms.ReportForm.deleteBtn_Click(对象发件人, c:\Users\ALI PC\Documents\My Projects\Doctor 中的 EventArgs e) Clinic\Doctor Clinic\Forms\ReportForm.cs:第 94 行

var file = @image;
using (var s = new System.IO.FileStream(file, System.IO.FileMode.Open))
{
    PatientImage.Image = Image.FromStream(s);
}
PatientImage.Image = null;
PatientImage.Image.Dispose();
System.IO.File.Delete(file);

【问题讨论】:

  • 此链接适用于 vb.net 我正在使用 c# @AjayKumar
  • 兄弟,那么您也应该在问题中添加一个 vbNet 标签。
  • @progahmed 但是,框架是相同的,所以例外和解决方案是相同的。只是编程语法不同。

标签: c# image winforms picturebox


【解决方案1】:

您的标题具有误导性。抛出的线不是Delete,而是Dispose

您已经将其设置为null,因此您不能再使用Dispose。改用这个:

   ..
   if (PatientImage.Image != null)
   {
      Image dummy = PatientImage.Image; 
      PatientImage.Image = null; 
      dummy.Dispose(); 
   }
   ..

首先我们存储一个新的对图像的虚拟引用;然后我们从控件中清除引用,最后我们使用虚拟引用来释放 GDI 资源。

当您想将新的Image 设置为PictureBox 时,也建议您这样做。

(在处理 reference 变量时,这看起来比人们预期的要复杂一些;但这 不是 PictureBox.Image 是什么。它是一个 财产 以及幕后发生的各种额外活动..)

【讨论】:

  • 完成了,非常感谢,对不起我的英语不好。
  • 不应该处理空对象只是抛出一个空指针异常,而不是一个 IO 异常吗?
  • 这里还有另一个问题。图像是从using 块内的文件流分配的。那是不对的;根据规格the stream has to remain open while the image lives。为了解决锁定问题,您可以将图像的字节读入字节数组,从中创建一个MemoryStream,然后简单地保持该流打开。作为基于系统数组的流,而不是像文件这样的外部对象,这在垃圾收集方面显然是完全可以的。
【解决方案2】:

您的图像被您机器上的另一个应用程序或另一个正在运行的作业使用。 为确保没有人在使用该图像,请重新启动您的电脑并重试。如果这不起作用,请检查文件的权限

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 2016-01-20
    • 2016-01-01
    • 1970-01-01
    • 2023-03-05
    • 2013-07-09
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多