当我试图删除图片框中使用的图像时出错

error when i'm trying to delete an image used in a picturebox

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

当我试图删除我一直在图片框中使用的图像时出现此错误消息..:[=​​12=]

System.IO.IOException: The process cannot access the file 'C:\Users\ALI PC\Documents\My Projects\Doctor Clinic\Doctor Clinic\Images.jpg' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode) at Doctor_Clinic.Forms.ReportForm.deleteBtn_Click(Object sender, EventArgs e) in c:\Users\ALI PC\Documents\My Projects\Doctor Clinic\Doctor Clinic\Forms\ReportForm.cs:line 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);

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

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

您已经将它设置为null,所以您不能再Dispose了。改用这个:

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

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

每当您想将新的 Image 设置为 PictureBox 时,也推荐这样做。

(这看起来比处理 reference 变量时预期的要复杂一些;但那是 不是 什么 PictureBox.Image 是。它是一个 属性,在幕后有各种额外的东西..)