Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WPF C# смена изображения / 11 сообщений из 11, страница 1 из 1
23.10.2013, 16:33
    #38438627
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Привет всем, сразу к делу.
Код:

Image1.Source = new BitmapImage(new Uri("Файл1"));
System.IO.File.Copy("Файл1", "Место записи", true);

Image1.Source = new BitmapImage(new Uri("Файл2"));
System.IO.File.Delete("Место записи"); //Здесь ошибка
System.IO.File.Copy("Файл2", "Место записи", true);



1. Я загружаю в Image картинку, потом, загруженную картинку сохраняю в свою папку.
2. Загружаю новую и старую хочу удалить. Но пишет сообщение типа "Данный объект удалить нельзя он используется".

Перелопатил 10 страниц гугла.
Как мне можно освободить эту виртуально "висячюю" картинку? И допустим на её место копировать новую.
Напоминаю язык C# на WPF, а не Winforms.
...
Рейтинг: 0 / 0
23.10.2013, 19:14
    #38438923
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
IRagnarok,
автор Я загружаю в Image картинку,
Image1.Source = new BitmapImage(new Uri("Файл1"));
авторзагруженную картинку сохраняю в свою папку.
System.IO.File.Copy("Файл1", "Место записи", true);
автор Загружаю новую
Image1.Source = new BitmapImage(new Uri("Файл2"));
авторстарую хочу удалить
System.IO.File.Delete("Место записи"); //Здесь ошибка ///
Так что вы удаляете копию первой картинки, или саму первую картинку? -Файл1
если ее то ошибка вполне допустима..
...
Рейтинг: 0 / 0
23.10.2013, 19:23
    #38438931
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
скорее всего - Файл1
ибо в Copy стоит перезапись
...
Рейтинг: 0 / 0
23.10.2013, 22:56
    #38439089
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Ну там видимо чуть не дописал.

Я копирую к себе файл и его копию читаю в Image. (об оригинале забываем)
Потом, допустим, хочу удалить копию файла(файл1) и на его место(с таким же как он именем) копировать копию другого изображения(файл2).
Я сначала читаю в Image оригинальный файл другого файла(файл2), и (так как я думаю если я присвоил другой Sourse объекту image, то он , вроде, должен потерять ссылку на (файл1)), удаляю (файл1)!!!Тут вылезает ошибка!!!, и потом на его место копирую другой указанный (файл2) и беру с него повторно Sourse.

Если я недостаточно понятно выразился, то напишу поставленную задачу)))).

Мне нужно менять изображение в Image (выбирать файл из файлового диалога) и копировать его в свою папку.
Это получается, но при повторном изменении/удалении старого, вылетает ошибка))))
...
Рейтинг: 0 / 0
23.10.2013, 23:28
    #38439111
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
IRagnarok,
Конечно будет вылетать....
...
Рейтинг: 0 / 0
24.10.2013, 10:16
    #38439347
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Где-то в степи,

Посоветуете что-нибудь юному начинающему программисту?
...
Рейтинг: 0 / 0
24.10.2013, 10:39
    #38439386
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
IRagnarok,
ну вот почитай мои мысли
вот ты делаешь вот такое тело движение
Image1.Source = new BitmapImage(new Uri("Файл1"));
потом
Image1.Source = new BitmapImage(new Uri("Файл2"));
а потом
System.IO.File.Delete("Файл1"); //Здесь ошибка
ты наверно наивно думаешь что объект new BitmapImage(new Uri("Файл1")); просто исчез
он никуда не исчез он остался в памяти, подберет его коллектор - когда ему вздумается.
***
я с BitmapImage никогда не работал, но смею предположить если его называют источником, то он держит открытым файл
не вызывая закрытия хендлера файла, по этому ты и не можешь удалит этот файл.
наверное у этого типа должно быть что то типа диспозе или ендинита, который делает закрытие, ведь держать открытым плоховато, вот и поищи как его освободить , не вызывая коллектора - желательно..
...
Рейтинг: 0 / 0
24.10.2013, 12:21
    #38439631
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Где-то в степи,

Ну да) в Winforms есть диспоз или клоз к такому типу объектов, а именно для WPF я искал такую функцию, но пока что безрезультатно(((
...
Рейтинг: 0 / 0
24.10.2013, 13:32
    #38439833
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
IRagnarok,
мастерим :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  public static BitmapImage GetBitmapImage(string str)
        {
            var bitmap = new BitmapImage();
            using (var stream = new FileStream(str, FileMode.Open, FileAccess.Read))
            {
                bitmap.BeginInit();
                bitmap.CacheOption = BitmapCacheOption.OnLoad;
                bitmap.StreamSource = stream;
                bitmap.EndInit();
                bitmap.Freeze();
            }
            return bitmap;
        }


исполняем:
Код: c#
1.
2.
3.
4.
            Image image = new Image();
            BitmapImage bitmapImage = GetBitmapImage("Файл1");
            image.Source = bitmapImage;
            File.Delete("Файл1");
...
Рейтинг: 0 / 0
24.10.2013, 15:44
    #38440100
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Где-то в степи,

Спасибо, сейчас протестю :)
...
Рейтинг: 0 / 0
25.10.2013, 11:04
    #38440894
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF C# смена изображения
Где-то в степи,

Спасибо. Всё работает. Оказывается надо просто в отдельный метод засунуть виртуальный объект изображения
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / WPF C# смена изображения / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]