Всем доброго времени суток.
Возникла следующая проблема: На форме есть ListBox, в данный ListBox, я добавляю итемы в виде "Картинка+Текст":
<ListBox Name="lstTest">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="50">
<Image Name="imgTest" Height="24" Width="24" Margin="0" Source="{Binding path_img}"/>
<TextBlock Name="txtTest" Margin="5, 15, 0, 0" Text="{Binding nameTest}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Добавляю итемы следующим образом:
lstTest.Items.Add(new DirectoryListing() { path_img = System.Windows.Forms.Application.StartupPath + "\\Test\\favicon.png", nameTest= "Тестовый итем" });
Класс "DirectoryListing" выглядит следующим образом:
public partial class DirectoryListing
{
public string path_img { get; set; }
public string nameTest { get; set; }
}
И собственно, вся суть проблемы в том, что при попытки удалить всю папку с картинкой (предварительно удалив Итем из ListBox) возникает ошибка - "Процесс не может получить доступ к файлу "favicon.png", так как этот файл используется другим процессом."
Удалить я пытаюсь следующим образом:
foreach (DirectoryListing di in lstTest.Items)
{
if (di == lstTest.SelectedItem)
{
di.nameTest= null;
di.path_img = null;
lstTest.Items.Remove(lstTest.SelectedItem);
di.Dispose();
break;
}
}
FileSystem.DeleteDirectory(System.Windows.Forms.Application.StartupPath + "\\Test", DeleteDirectoryOption.DeleteAllContents);
Суть то мне ясна, что нужно как то освободить этот файл картинки от моей программы, но как это сделать?
Чтобы получить нужное поведение, вам придётся использовать загрузку изображения в память вместо использования URI.
Например, вот так:
var bitmap = BitmapFrame.Create(
memoryStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
image.Source = bitmap; // image - ваш Image из разметки
Ключевое здесь - BitmapCacheOption.OnLoad. Этот флаг заставляет WPF загрузить данные в память и освободить ресурс.
Можно добавлять полученные битмапы в лист и биндить также, как делаете вы. Остаётся только загрузить данные в MemoryStream.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Какие есть способы получить долготу и широту устройства в C#? Я пробовал с помощью GeoCoordinateWatcher, но тщетноДелал всё как по книжке, но в итоге...
Подскажите пожалуйста как обработать событие только 1 раз? Обрабатывается один раз потому-что при клике на элемент вылазиет еще модальное...
Проблема состоит в том,что healthBar это UI объект (слайдер) и он перекрывает спрайт летящего самолета
В общем, есть документ excel в котором есть 2 нужных столбцаСтолбцы с данными от J7 до n и от K7 до n