Мне нужно загружать картинку из бд и отображать ее на екране в контроле Image, после чего в определенном моменте мне нужно очищать Source тоесть путь к картинке что бы ее удалить и загрузить новую.
Свойство прибинденное к Source у Image:
private string photo;
public string Photo
{
get { return photo; }
set
{
photo = value;
OnPropertyChanged("Photo");
}
}
Очищаю путь к картинке и загружаю новую из бд:
// пытаюсь заставить сбросить путь
Photo = null;
// при попытке удаление вылазит ошибка "невозможно удалить так как используеться другим процесом"
File.Delete(Environment.CurrentDirectory + "\\Photo.png");
// загрузка картинки з бд на форму
if (SelectedVerstatOperator.Photo != null)
{
ImageLoadFromDataBase(SelectedVerstatOperator.Photo);
}
Метод ImageLoadFromDataBase:
private void ImageLoadFromDataBase(byte[] image)
{
using (var ms = new MemoryStream(image))
{
// создаю новую картинку
var photo = System.Drawing.Image.FromStream(ms);
// сохраняю ее на диск
photo.Save(Environment.CurrentDirectory + "\\Photo.png");
// задаю путь к картинке для отображения в Image
Photo = Environment.CurrentDirectory + "\\Photo.png";
}
}
Как заставить Image оставить в покое картинку? Что бы я ее удалил
Ответ
Решил так.
Сохраняю картинку с рандомным именем в папку Temp
private void LoadImageFromDataBase(byte[] image)
{
using (var ms = new MemoryStream(image))
{
var photo = System.Drawing.Image.FromStream(ms);
string randomFileName = Path.GetRandomFileName();
randomFileName = randomFileName.Replace(".", "");
var path = Environment.CurrentDirectory + "\\Temp\\" + randomFileName + ".png";
photo.Save(path);
Photo = path;
}
}
А при закрыти программы удаляю папку Temp и заново создаю ее
string dir = System.Environment.CurrentDirectory + "\\Temp";
System.IO.Directory.Delete(dir, true);
System.IO.Directory.CreateDirectory(dir);
Комментариев нет:
Отправить комментарий