Процесс не может получить доступ к файлу, потому что он используется другим процессом - с использованием статического класса

Я получаю ошибкуПроцесс не может получить доступ к файлу, потому что он используется другим процессом " когда я пытаюсь удалить только что загруженные файлы (это по крайней мере через несколько секунд после загрузки файлов, поэтому я уверен, что они закончили запись). Есть идеи, почему это происходит? PS: миниатюры, которые я генерирую, удаляют без проблем, но оригиналы как-то блокируются.

            var FileExt = Path.GetExtension(photo.File.FileName);
            var FilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId), photo.PhotoId.ToString()) + FileExt;
            photo.File.SaveAs(FilePath);
            var ThumbFilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId),photo.PhotoId.ToString() + "_thumbnail") + FileExt;
            PhotoTools.MakeThumbnail(FilePath, ThumbFilePath, 0.15);
            return RedirectToAction("Create");

Внутри класса PhotoTools ...

    public static void MakeThumbnail(string ImgIn, string ImgOut, double Percent)
    {
        Image img = Image.FromFile(ImgIn);
        double Width = img.Width*Percent;
        double Height = img.Height*Percent;
        MakeThumbnail(ImgIn, ImgOut, (int)Width, (int)Height);
    }

Удалить функцию ...

    public ActionResult DeleteConfirmed(int id)
    {
        Client client = db.Clients.Find(id);
        db.Clients.Remove(client);
        db.SaveChanges();
        if (Directory.Exists(Server.MapPath("~/App_Data/" + id)))
        {
            Directory.Delete(Server.MapPath("~/App_Data/") + id,true);
        }
        return RedirectToAction("Index");
    }
 Haney10 июн. 2013 г., 02:20
Показать другой код MakeThumbnail. Уверен, что тыне избавляясь от класса.
 David Tansey10 июн. 2013 г., 02:24
Вы сказали "когда я пытаюсь удалить только что загруженные файлы " который мог бы использовать немного уточнения. Потому что нетdelete в вашем коде для файла или миниатюры это звучит так, как будто вы говорите об удалении этих файлов с помощью Проводника Windows или аналогичного? Это правильно или ...?
 RealityDysfunction10 июн. 2013 г., 05:31
Я обновил код, чтобы показать метод удаления, для дальнейшего использования. Метод был вызван отдельно.
 John Saunders10 июн. 2013 г., 02:32
Вы удаляете файлы во время того же запроса, в котором вы их создали?

Ответы на вопрос(1)

Решение Вопроса

что выповторный звонокDispose() наImage типы. Это или используйте синтаксис использования:

using (Image img = Image.FromFile(ImgIn))
{
    // Your code
}
 Haney10 июн. 2013 г., 02:51
@ ДжеремиТомпсон - не уверен, что знаю достаточно об этом, чтобы объяснить это. Можете ли вы отредактировать мой пост или написать здесь, чтобы я мог проголосовать?
 Jeremy Thompson10 июн. 2013 г., 02:25
+1 было бы хорошо, если бы вы могли объяснить ОП, как ГК имеет "root ref " в файл от загрузки неуправляемого ресурса, и это приводит к блокировке файла.

Ваш ответ на вопрос