我正在编写一个小程序,我通过打开文件对话框选择图片。当我选择一张图片时,我希望它覆盖当前图片并显示新图像。现在我选择具有不同扩展名的图像没有任何问题。因此,当我目前有一个.png时,我可以选择一个.jpg但是当我选择一个与当前图像具有相同扩展名的图像时,我收到一个错误: 该进程无法访问文件'C:\ Users .... \ woontypeimages \ chalet_foto.jpg',因为它正由另一个进程使用。
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
如果有人能帮助我,我会很高兴
提前致谢
答案 0 :(得分:1)
使用这些:
picFoto.Image.Dispose()
picGrondplan.Image.Dispose()
而不是:
picFoto.Image = Nothing
picGrondplan.Image = Nothing
Image.FromFile方法在源文件上保持锁定,直到图像被处理完毕。将对象设置为空不会立即处理它 - 垃圾收集器将在其自己的时间内处理它(这可能不会直到您关闭带有图片框的表单)。需要处置以立即释放文件句柄。
答案 1 :(得分:1)
您可以使用PictureBox的Load(string)
方法而不是担心Dispose()
,而不会锁定文件。
Me.PictureBox1.Load("C:\test.png")