images fichier vb.net utilisé par une autre erreur de processus
-
23-09-2019 - |
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
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.