Image.FromFile сохраняет дескриптор файла открытым, пока изображение не будет удалено. Из MSDN :
"Файл остается заблокированным, пока изображение не будет удалено."
Используйте Image.FromStream, и у вас не будет проблем.
using(var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
return Image.FromStream(fs);
}
Редактировать: (год и чуть позже)
Приведенный выше код опасен, поскольку он непредсказуем, в какой-то момент времени (после закрытия файлового потока) вы можете получить ужас «В GDI + произошла общая ошибка» . Я хотел бы изменить его на:
Image tmpImage;
Bitmap returnImage;
using(var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
tmpImage = Image.FromStream(fs);
returnImage = new Bitmap(tmpImage);
tmpImage.Dispose();
}
return returnImage;