Вопрос по c#, caliburn.micro, wpf, resources – Управление заблокированными ресурсами (файлами изображений)

1

Приложение представляет собой настольную систему управления документами. Файлы изображений (отсканированных документов) хранятся в общей сетевой папке, а ее индексы - в базе данных. Теперь, когда отображается изображение выбранной страницы документа, пользователь имеет возможность удалить его (через контекстное меню). Проблема состоит в том, что, если я пытаюсь сделать это, он генерирует исключение (ресурс заблокирован), который имеет весь смысл, учитывая, что он отображается на экране. Итак, в настоящее время я поддерживаю постоянную очередь на удаление. Как только приложение запускается, я захожу в очередь и удаляю страницы документов, индексы которых были удалены из БД, и, учитывая, что они не отображаются, удаление прошло успешно, но, похоже, это довольно плохой код (я имею в виду, что он работает, но не так чисто, как и должно быть)

Как плохо мое быстрое решение. Учитывая, что приложение является однопользовательским, пользователь должен запустить приложение, чтобы использовать его. Это очень плохая идея, или я могу реализовать по другому пути.

Изображения отображаются (в средстве просмотра документов) путем привязки его к текущему файлу:

Посмотреть:

<Image Name="PageViewedPath" Margin="20" Grid.Column="0" />

ViewModel:

public string PageViewedPath { get; set; }

И как только пользователь щелкает следующим или предыдущим, я меняю (в ViewModel PageViewedPath). Может быть, проблема в том, что это связывание, которым я не могу управлять подробно, я использую Caliburn Micro, так что просто установив имя изображения, связывание выполнено.

Я думаю, что может потребоваться переопределение этой привязки и создание печатной копии изображения перед его показом, но я не уверен, будет ли это и хуже, как это сделать.

Ваш Ответ

2   ответа
1

которое я разработал с использованием пула изображений. Хотя изображение больше не отображалось, файл был заблокирован и не может быть удален.

Я решил свою проблему, загрузив изображения сBitmapCacheOption.OnLoad, что-то вроде этого:

Image myImage = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();

bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = imageUri;

// End initialization.
bi.EndInit();
myImage.Source = bi;

Вот ссылка на сообщение msdn, в котором показано, как использовать BitmapCacheOption из xaml:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3cb97997-941f-42a8-a03b-f84b152c1139/

Спасибо Экхольм. На самом деле нужно было создать конвертер (используя предоставленный вами код), но теперь все работает нормально. Еще раз спасибо. Erre Efe
0

ы, вероятно, пропустили некоторыеusing/Dispose звонки где-то вокруг загрузки изображения.

Если это не ваш код или вам нужно обрабатывать сбои из-за использования общих файлов - ваше решение может быть в порядке. Также большинство пользователей не ожидают такого поведения - я обычно ожидаю, что файл будет удален мгновенно или никогда.

Я фактически связываю изображение с путем ViewModel. Пожалуйста, смотрите мое редактирование. Erre Efe
Я не знаю. Посмотрите, поддерживает ли этот компонент Stream вместо String в качестве источника изображения - вы можете прочитать изображение в MemoryStream ...

Похожие вопросы