文件一直在使用,直到客户端刷新页面

File remains in use until client refreshes page

我正试图从服务器文件系统中删除图像文件,但出现 'file in use by another process' 错误。我试图一口气删除图像及其关联的缩略图。据我所知,我可以删除一个,但另一个会尝试并永远失败。但是,如果我在页面循环通过 try-catch 时刷新页面,操作会立即成功。当我加载页面时,我通过 ajax 请求和 API 控制器(我的网站主要是一页)访问文件,但我是通过 'using' 语句这样做的。这应该在使用后关闭手柄,但它似乎保持打开状态。我必须在客户端获取文件才能选择删除它们(浏览器内容管理器),所以我看不到它们仍在使用中。我加载缩略图并使用它的 ID 从数据库中获取它的名称,然后使用该名称在文件系统中找到它。

我曾尝试将 try-catch 置于循环中并等待最后一个进程完成,但它永远不会完成,直到我刷新页面。 我也尝试通过单独的 ajax 请求一次删除一个,但似乎如果我打开了一个文件,我无法删除它(直到我刷新页面)。

删除文件代码(方法一):

public static void DeleteFromFileSystem(string path)
{
     for (int i = 1; i <= 10000; ++i)
         {
         try
         {
             System.IO.File.Delete(path);
             break;
         }
         catch (IOException e) when (i <= 10000)
         {
             Thread.Sleep(3);
         }
    }
}

删除文件代码(方法二):

public static void DeleteFromFileSystem(string path)
{
     using(FileStream f = System.IO.File.OpenWrite(path))
     {
          System.IO.File.Delete(path);
     }
}

获取图像的代码(工作正常,但可能是问题所在):

public static byte[] ImageToByte(string name, bool getThumbnail)
{
    if (name == null) name = "user.png"; //default profile picture
    string path = getThumbnail ? "wwwroot/ImgThumb/" : "wwwroot/ImgFull/";

    // this line is my best suspect
    System.Drawing.Image img = System.Drawing.Image.FromFile(path + name);

    byte[] b;
    using (MemoryStream mStream = new MemoryStream())
    {
         img.Save(mStream, img.RawFormat);
         b = mStream.ToArray();
         mStream.Close(); // I added this as a precautionary. It didn't help.
    }
    return b;
}

我希望图像被删除,但我收到 'file X cannot be accessed because it is in use by another process' 错误。

已解决 - 我在 using 语句后添加了 img.Dispose()