невозможно удалить изображение после его открытия в приложении vb.net

У меня есть этот код:

Dim xx as image
xx = image.fromfile(Fileloc)
picturebox.image = xx

И я не могу удалить файл, хотя я загрузил его в окно изображения. Если я добавлю эту строку:

xx.dispose

поле с изображением становится большим красным крестиком.

Я хочу удалять изображения только тогда, когда мое приложение закрывается (это временные файлы). Так что, мне просто избавиться от них, прежде чем я их удалю?


person Jonathan.    schedule 16.01.2010    source источник
comment
Да, утилизируйте их, прежде чем удалять. Это снимает блокировку файла.   -  person Hans Passant    schedule 17.01.2010


Ответы (1)


Не используйте Image.FromFile, он держит файл открытым.

Из MSDN:

Файл остается заблокированным до тех пор, пока изображение не будет удалено.

Сделайте это вместо этого:

Dim xx as Image
Using str As Stream = File.OpenRead(Fileloc)
    xx = Image.FromStream(str)
End Using
picturebox.Image = xx

Файл закрывается после загрузки изображения, поэтому вы можете удалить файл, если вам нужно

person Thomas Levesque    schedule 16.01.2010
comment
Это не помогает, он по-прежнему связан с тем же файлом. - person Hans Passant; 17.01.2010
comment
Нет, это не так... Изображение связано только с потоком, который закрывается в конце блока Using. Он даже не знает имени файла... Я использовал эту технику в течение некоторого времени, и я уверен, что она отлично работает. - person Thomas Levesque; 17.01.2010
comment
Это делается неявно в конце блока Using (на самом деле он вызывает Dispose, который, в свою очередь, вызывает Close). - person Thomas Levesque; 17.01.2010