Image.Source (с привязкой) блокирует файл изображения после удаления привязки

В GridView я создал шаблоны элементов, поэтому элемент управления Image внутри этого шаблона получает Uri, используя привязку (также пробовал с BitmapImage) для отображения файла изображения. Это работает, но я не могу удалить эти файлы, потому что они заблокированы. Даже если я очистю коллекцию, скармливая GridView.ItemsSource, и даже если я позвоню GC.Collect(), они все равно будут заблокированы.

Спасибо Филипу за его рабочее предложение... поскольку я использовал Converter для подачи BitmapImage в каждый элемент управления Image, я обнаружил, что для его работы нужно сделать некоторые конкретные вещи, и вот оно для дальнейшего использования:

InMemoryRandomAccessStream Ras = new InMemoryRandomAccessStream();
var archivo = CartoonsDownloader.FolderImagenes.GetFileAsync(TheFileName);

var fileStream = CartoonsDownloader.FolderImagenes.OpenStreamForReadAsync(TheFileName);
fileStream.Result.CopyTo(Ras.AsStreamForWrite());

BitmapImage MapaDeBits = new BitmapImage();
// Even it's RANDOM, I have to manually "Seek" it at 0.
Ras.Seek(0);
MapaDeBits.SetSource(Ras);
MapaDeBits.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
return MapaDeBits;

person NestorArturo    schedule 09.06.2012    source источник
comment
Из любопытства — как настроить Uri для получения изображения из места, которое поддерживает удаление файлов?   -  person Filip Skakun    schedule 10.06.2012
comment
Таким образом: ms-appdata:///local/My Cartoons/Images/image.jpg, проверьте этот хороший пост для получения полного списка синтаксисов uri для Metro: lunarfrog.com/blog/2012/05/21/winrt-folders-access/#local   -  person NestorArturo    schedule 11.06.2012


Ответы (1)


Это может быть ошибка в стеке XAML (чтобы сообщить об этом в MSDN форумы), или просто побочный эффект кэширования изображений. В качестве альтернативы вы можете открыть файл самостоятельно и установить образ с помощью SetSource. Тогда вы должны лучше контролировать доступ к файлам.

person Filip Skakun    schedule 10.06.2012