Ho creato un form con un controllo picture ed ho messo queste due dichiarazioni all'inizio in modo tale che la visibilità delle variabili dichiarate sia a livello di tutto il codice del form.
codice:
Private Immagine As String=""
Private Imgnotf As String="c:\temp\nontrovata.jpg"
Poi ho creato le seguenti routine:
codice:
Private Sub CaricaImmagine()
immagine = "c:\temp\prova.jpg"
If Not (ImgBig.Image Is Nothing) Then
ImgBig.Image.Dispose()
ImgBig.Image = Nothing
End If
Try
If IO.File.Exists(immagine) Then
ImgBig.Image = New Bitmap(immagine)
Else
ImgBig.Image = New Bitmap(imgnotf)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub CreaImmagine()
OFD.Filter = "File di immagine supportati (*.Bmp,*.Emf,*.Exif,*.Gif,*.Icon,*.Jpeg,*.Jpg,*.Png,*.Tiff,*.Tif,*.Wmf)|*.Bmp;*.Emf;*.Exif;*.Gif;*.Icon;*.Jpeg;*.Jpg;*.Png;*.Tiff;*.Tif;*.Wmf"
OFD.Multiselect = False
OFD.ShowDialog()
If IO.File.Exists(OFD.FileName) Then
Dim ImgOld As New Bitmap(OFD.FileName)
Dim ImgNew As New Bitmap(ImgOld, 400, 290) 'questa mi serve per ridimensionare l'immagine a mio piacimento
ImgNew.Save(immagine)
ImgNew.Dispose()
ImgOld.Dispose()
ImgBig.Image.Dispose()
ImgBig.Image = New Bitmap(immagine)
End If
End Sub
Private Sub CancellaImmagine()
Do
ImgBig.Image.Dispose()
ImgBig.Image = Nothing
ImgBig.Image = New Bitmap(imgnotf)
Me.Refresh()
ImgBig.Refresh()
Try
IO.File.Delete(immagine)
Exit Do
Catch ex As Exception
Dim x As Microsoft.VisualBasic.MsgBoxResult = MsgBox("Impossibile eliminare il file!" & vbCrLf & "Riprovare?", MsgBoxStyle.YesNo, Appl.Titolo)
If x = MsgBoxResult.No Then Exit Do
End Try
Loop
End Sub
Il progetto avvia un'altro form che con un pulsante mi richiama questo.
Sull'evento Load del Form faccio una chiamata alla routine caricaimmagine
ho aggiunto un bottone "carca..." e un controllo openfiledialog chiamato OFD
a questo punto ho messo sull'evento click del pulsante una chiamata alla routine creaimmagine
poi ho creato un pulsante "cancella..." e sul suo evento click la chiamata alla routine cancellaimmagine
ho testato l'applicazione e funziona ma ad un certo punto ho scoperto questo errore che si verifica solo effettuando le seguenti operazioni:
1-apro il form
2-carico un'immagine
3-chiudo il form
4-riapro il form
5-cancello l'immagine
il debug mi da che non può cancellare il file perchè in uso da un'altro processo.
se però ad esempio faccio così:
1-apro il form
2-carico un'immagine
5-cancello l'immagine
funziona oppure faccio:
1-apro il form
2-carico un'immagine
3-chiudo il form
4-chiudo l'applicazione
6-rilancio l'applicazione e apro il form
7-cancello l'immagine
allora anche in questo caso funziona.
da cosa potrebbe dipendere?