PICTUREBOX PROBLEMA PARA LIMPAR

WARZ 04/06/2017 21:13:48
#474317
Algum tempo atrás o TUNUSAT me passou como fechar a imagem após carregar no cadastro de clientes.

dim img as image
dim img2 as bitmap

img=Image.fromfile([Ô]nomedoarquivo[Ô])
img2=new bitmap(img)
img.dispose()
picturebox1.image=img2

Porem agora eu abro as imagens para visualizar e vou passando e se eu tentar deletar as imagens com a aplicação sendo executada diz que o arquivo esta em uso, certo.
Como mostro acima consigo fechar, mas somente uma imagem apontando o diretório dela na rotina acima, mas se eu tiver varias imagens? teria como fechar todos arquivos que foram visualizados na picturebox?
*.jpg *.*

WARZ 04/06/2017 22:49:24
#474318
Imports System.IO
Public Class Form1
Dim Imagens() As String
Dim contador As Integer = 0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If PictureBox1.Image Is Nothing Then
MsgBox([Ô]Sem imagens para visualizar[Ô])
Else
contador += 1
If Imagens.Length = contador Then
contador = 0
End If
PictureBox1.Image = Image.FromFile(Imagens(contador))
End If
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Imagens = Directory.GetFiles([Ô]D:\WARZ\Documents\IMAGENS[Ô], [Ô]*.jpg[Ô])
PictureBox1.Image = Image.FromFile(Imagens(0))
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If PictureBox1.Image Is Nothing Then
MsgBox([Ô]Sem imagens para visualizar[Ô])
Else
If contador = 0 Then
contador = Imagens.Length
End If
contador -= 1
PictureBox1.Image = Image.FromFile(Imagens(contador))
End If
End Sub
End Class
DS2T 05/06/2017 10:18:46
#474319
Resposta escolhida
Sempre que for trabalhar com arquivos, você deve dar um Dispose no objeto.
Pega o retorno do seu Image.FromFile, coloca numa variável... usa, e depois manda um Dispose.

Abraços!
WARZ 05/06/2017 12:22:51
#474324
Então,
já tinha tentado colocar um botão e usar:

PictureBox1.Dispose()
PictureBox1.Image = Nothing

E não funcionou, mesmo assim a imagem ainda continua em uso e não pode ser deletada sem fechar o form.
DS2T 05/06/2017 14:06:05
#474329
O método Image.FromFile retorna um tipo Image (ou Bitmap, não to lembrado exatamente agora).

Você deve jogar o retorno dele pra uma variável.
Só então, você jogará o valor para o PictureBox.
Depois de usar, a imagem, você dá um Dispose nessa variável. Dar o Dispose no PictureBox não faz muito sentido nesse contexto.

Abraços!
WARZ 06/06/2017 16:49:34
#474348
Eu acho que ainda tem algo errado pois não funciona, acho que pode ser o contador pois a cada imagem que passo visualizando ele conta... como eu posso zerar o contador?
DS2T 06/06/2017 20:06:30
#474359
Fiz um exemplo.
Segue...

Abraços!
WARZ 07/06/2017 03:11:52
#474369
DS2T tudo é variável eu estava tentando jogar direto tanto na picturebox quando no contador.. foi o que tinha dito mas eu estava empacado, agora vendo seu exemplo pudi entender melhor eu estava ate tentando usar (Do Loop) mas sem sucesso.. Vou tentar entender melhor seu exemplo pois tudo funciona corretamente.
Obrigado pela ajuda
Tópico encerrado , respostas não são mais permitidas