Страница: 1 |
Страница: 1 |
Вопрос: Вопрос по PictureBox'у.
Добавлено: 23.09.04 20:47
Автор вопроса: RendeRR | ICQ: 178595360
'VB.NET
PictureBox1.Image = System.Drawing.Image.FromFile("C:\qwerty.png")
System.IO.File.Delete("C:\qwerty.png") ' очень надо.
'Ругается: The process cannot access the file "C:\qwerty.png" because it is being used by another process.
'PictureBox1.Image = Nothing не помогает...
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #1
Добавлено: 24.09.04 06:01
Не че не понимаю в NET, но думаю что PictureBox здесь не при чем. Попробуй System = Nothing или Set System = Nothing. Хотя, что такое System не знаю. И еще после Set … = Nothing, можно попробовать сделать паузу, например с помощью ф-и Sleep. Она то должна работать в NET.
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 24.09.04 08:40
Хм... Возможно файл нельзя удалить пока твоя прога его использует. Попробуй первую строку закоментировать, проверь твоя ли прога не дает файл удалить. Глупо, конечно, но всякое возможно...
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 24.09.04 09:15
А если так?
Picture1.Image.Dispose
Номер ответа: 4
Автор ответа:
Diavolo
Вопросов: 6
Ответов: 46
Профиль | | #4
Добавлено: 24.09.04 17:21
Dim MyImage as Image
MyImage = Image.FromFile("***filename***"
PictureBox1.Image = MyImage
MyImage.Dispose()
А далее файл поддается любым действиям. Что важно, в PictureBox1 все еще остается изображение. Если его нужно удалить - то вот теперь применяем PictureBox1.Image = Nothing
С ув. Виталий
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 25.09.04 10:02
Итак, подведу итог...
Для освобождения ресурсов (файла) наобходимо вызвать метод Dispose
объекта Image:
PictureBox1.Image.Dispose()
Однако, если не очистить PictureBox, то при следующей отрисовке окна
будет сгенерирвоано исключение. Поэтому сразу после освобождения Image
нужно очистить PictureBox:
PictureBox1.Image = Nothing
Проверено на .Net Framework 2.0 beta.
Номер ответа: 6
Автор ответа:
Diavolo
Вопросов: 6
Ответов: 46
Профиль | | #6
Добавлено: 29.09.04 16:50
А зачем выгружать картинку с пикчебокса?! Я привел пример специально так, чтобы картинка имела шанс там остаться, а файл, откуда она подгружалась, освободился. Если убить полностью объект, то все ссылки, связанные с ним, освободятся... так что как итог - более широкий смысл действий в том, что привел я. Если же не нужно оставлять, то, Паш, ты прав
Номер ответа: 7
Автор ответа:
RendeRR
ICQ: 178595360
Вопросов: 14
Ответов: 14
Профиль | | #7
Добавлено: 29.09.04 17:00
Ещё можно (на другом форуме подсказали):
fs = New System.IO.FileStream("c:\qwerty.png", IO.FileMode.Open)
 im i As System.Drawing.Image
i = System.Drawing.Image.FromStream(fs)
fs.Close()
Me.PictureBox1.Image = i
А потом можно с "qwerty.png" делать что угодно.
И ещё почему-то работает
PictureBox1.Image = System.Drawing.Image.FromFile("C:\qwerty.png"
PictureBox1.Image = Nothing
 im P() As Process = Process.GetProcesses()
System.IO.File.Delete("C:\qwerty.png"
Всем списибо.
Номер ответа: 8
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #8
Добавлено: 07.10.04 11:24
Diavolo, ты не прав на все 100%.
Попробуй, запусти свой код, потом закрой PictureBox сверху
каким-нибудь другим окном, и посмотри, что останется от картинки.
Я при таком эксперименте получил какой-то неизвестный Exception,
потому что картинка из памяти удалена, и из окна PictureBox стерта, а
перерисовываться ей неоткуда.
Так что мой ответ самый правильный из всех предложенных.