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?