Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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)
        ;Dim 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
        ;Dim P() As Process = Process.GetProcesses()
        System.IO.File.Delete("C:\qwerty.png";)
Всем списибо.

Ответить

Номер ответа: 8
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #8
Добавлено: 07.10.04 11:24
Diavolo, ты не прав на все 100%.
Попробуй, запусти свой код, потом закрой PictureBox сверху
каким-нибудь другим окном, и посмотри, что останется от картинки.
Я при таком эксперименте получил какой-то неизвестный Exception,
потому что картинка из памяти удалена, и из окна PictureBox стерта, а
перерисовываться ей неоткуда.
Так что мой ответ самый правильный из всех предложенных.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам