Я пишу приложение Image Manager WPF. У меня есть ListBox со следующим ItemsTemplate:
<Grid x:Name="grid" Width="150" Height="150" Background="{x:Null}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="27.45"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<Border Margin="5,5,5,5.745" Grid.RowSpan="2" Background="#FF828282" BorderBrush="{DynamicResource ListBorder}" CornerRadius="5,5,5,5" BorderThickness="1,1,2,2" x:Name="border">
<Grid>
<Viewbox Margin="0,0,0,21.705">
<Image Width="Auto" Height="Auto" x:Name="picture" Source="{Binding Path=FullName}" />
</Viewbox>
<TextBlock Height="Auto" Text="{Binding Path=Name}" TextWrapping="Wrap" x:Name="PictureText" HorizontalAlignment="Left" Margin="70,0,0,0" VerticalAlignment="Bottom" />
</Grid>
</Border>
</Grid>
Обратите внимание, что элемент управления «Изображение» привязан к свойству «Полное имя», которое представляет собой строку, представляющую абсолютный путь к файлу JPG.
Некоторые функции приложения требуют, чтобы я изменил файл JPG (переместил, переименовал или удалил). Когда я пытаюсь это сделать (в настоящее время пытаюсь переместить файл), я получаю исключение IOException: «Процесс не может получить доступ к файлу, поскольку он используется другим процессом». Процесс, блокирующий файл, — это мое приложение WPF.
Я провел поиск в Интернете и нашел несколько сообщений, указывающих на то, что у изображений, в частности, есть проблемы с освобождением своих ресурсов. Я пробовал следующее:
- Установка для ListBox.Source значения null
- Добавление 10-секундного времени ожидания перед попыткой перемещения.
- Выдача GC.Collect().
- Перенос операции в другой поток.
Что еще я могу попробовать? Я думал найти ссылку на объект Image в ItemsTemplate и попытаться избавиться от изображения, но не могу понять, как получить ссылку.
Одно из возможных решений, о котором я читал, состояло в том, чтобы создавать копии изображений, а не фактические изображения, но, поскольку привязка относится к имени файла, а не к фактическому изображению, я не знаю, смогу ли я это сделать.
Любая помощь или предложения будут высоко оценены.