Использование CacheOption = BitmapCacheOption.OnLoad
Этот параметр можно использовать со свойством BitmapImage.CacheOption
или в качестве аргумента для BitmapDecoder.Create()
Если вы хотите получить доступ к нескольким кадрам после загрузки изображений, вам придется использовать BitmapDecoder.Create
. В любом случае файл будет загружен полностью и закрыт.
Смотрите также мой ответ на этот вопрос
Обновление
Следующий код отлично работает для загрузки всех кадров изображения и удаления файла:
var decoder = BitmapDecoder.Create(new Uri(imageFileName), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
List<BitmapFrame> images = decoder.Frames.ToList();
File.Delete(imageFileName);
Вы также можете получить доступ к декодеру. Конечно же, после удаления файла.
Этот вариант также работает, если вы предпочитаете открывать поток самостоятельно:
List<BitmapFrame> images;
using(var stream = File.OpenRead(imageFileName))
{
var decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
images = decoder.Frames.ToList();
}
File.Delete(imageFileName);
В любом случае это более эффективно, чем создание MemoryStream
, поскольку MemoryStream
сохраняет в памяти сразу две копии данных: декодированную и не декодированную копию.