У меня есть listview с привязкой OberservableCollection к его источнику items. Каждый ListViewItem показывает изображение (ImageSource устанавливается с помощью URI размещения файла в localfolder:Как перезаписать StorageFile (изображение), которое отображается в пользовательском интерфейсе [System.UnauthorizedAccessException]?
<Image Source={x:Bind ImageURI} />
Теперь я хочу, чтобы пользователь мог изменить файл, но когда я перезаписать его я получаю систему. UnauthorizedException который имеет смысл, так как изображения «используется» (это показано на экране).
исключение типа «System.UnauthorizedAccessException» произошло в mscorlib.ni.dll, но не был обработан в пользовательском коде
Дополнительная информация: Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))
Теперь я попытался быстро заменить изображение другим изображением, а THEN перезаписать файл, но та же проблема все еще возникает.
public static async Task SaveToLocalStorage(string FileName, WriteableBitmap Bitmap)
{
StorageFile outputFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(FileName + ".png", CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
{
byte[] pixels;
using (Stream stream = Bitmap.PixelBuffer.AsStream())
{
pixels = new byte[(uint)stream.Length];
await stream.ReadAsync(pixels, 0, pixels.Length);
}
// Encode pixels into stream
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, writeStream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)Bitmap.PixelWidth, (uint)Bitmap.PixelHeight, 96, 96, pixels);
await encoder.FlushAsync();
}
}
Любые идеи?
С уважением, Niels
Как вы меняли изображение? Думаю, твоя догадка правильная. Проблема здесь в том, что изображение, показанное в пользовательском интерфейсе, по-прежнему содержит ссылку на файл, который вы пытаетесь изменить. –
Я просто обновляю ObservableCollection [Item] с новым Uri для ссылки. Вы видите, что ListView обновляется, но он все еще, кажется, «используется» где-то. – Niels