Question

Je vous écris un petit programme où je sélectionne une image à travers un dialogue de fichier ouvert. Quand je choisi une photo que je veux qu'il écrasez l'image actuelle et afficher la nouvelle image. Maintenant, je n'ai pas de problèmes avec la cueillette d'une image avec une extension différente. Alors, quand j'ai actuellement un .png je peux sélectionner un .jpg, mais lorsque je choisis une image avec la même extension que l'image actuelle, je reçois une erreur: Le processus ne peut pas accéder au fichier. « C: \ Users .... \ woontypeimages \ chalet_foto.jpg » parce qu'il est utilisé par un autre processus

    If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
        Dim sFilename As String = cboWoningtypesWoningtype.SelectedItem.ToString & "_foto" & System.IO.Path.GetExtension(ofd.FileName)
        System.IO.File.Copy(ofd.FileName, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Camping Relaxx\woontypeimages\" & sFilename, True)
        txtWoningtypesFoto.Text = sFilename
        updateImages()
    End If

    Private Sub updateImages()

    Try
        picFoto.Image = Nothing
        txtWoningtypesFoto.BackColor = clrReadonly
        txtWoningtypesFoto.ForeColor = Color.Black
        picFoto.Image = System.Drawing.Image.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Camping Relaxx\woontypeimages\" & txtWoningtypesFoto.Text)
    Catch ex As Exception
        txtWoningtypesFoto.BackColor = clrError
        txtWoningtypesFoto.ForeColor = Color.White
    End Try
    Try
        picGrondplan.Image = Nothing
        txtWoningtypesGrondplan.BackColor = clrReadonly
        txtWoningtypesGrondplan.ForeColor = Color.Black
        picGrondplan.Image = System.Drawing.Image.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\Camping Relaxx\woontypeimages\" & txtWoningtypesGrondplan.Text)
    Catch ex As Exception
        txtWoningtypesGrondplan.BackColor = clrError
        txtWoningtypesGrondplan.ForeColor = Color.White
    End Try

End Sub

Si quelqu'un pouvait me aider je serais heureux

Merci d'avance

Était-ce utile?

La solution

Au lieu de se soucier de Dispose() vous pouvez plutôt utiliser le Load(string) méthode de la PictureBox qui ne se verrouille pas le fichier.

Me.PictureBox1.Load("C:\test.png")

Autres conseils

Utilisez-les:

picFoto.Image.Dispose()
picGrondplan.Image.Dispose()

au lieu de:

picFoto.Image = Nothing
picGrondplan.Image = Nothing

La méthode de Image.FromFile maintient un verrou sur le fichier source jusqu'à ce que l'image a été disposé. La définition d'un objet à rien ne jetez pas immédiatement - le garbage collector prendra soin de ce en son temps (qui pourrait bien ne pas être jusqu'à ce que vous avez fermé la forme avec la zone d'image sur). Dispose est nécessaire pour libérer immédiatement le descripteur de fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top