0

我正在编写一个小程序,通过打开文件对话框选择图片。当我选择一张图片时,我希望它覆盖当前图片并显示新图片。现在我选择具有不同扩展名的图像没有任何问题。因此,当我当前有一个 .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

如果有人可以帮助我,我会很高兴

提前致谢

4

2 回答 2

1

使用这些:

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

代替 :

picFoto.Image = Nothing
picGrondplan.Image = Nothing

Image.FromFile 方法保持对源文件的锁定,直到图像被释放。将对象设置为空并不会立即处理它——垃圾收集器会在自己的时间处理它(这很可能直到你关闭带有图片框的表单)。Dispose 需要立即释放文件句柄。

于 2010-01-28T16:51:26.657 回答
1

不用担心,Dispose()您可以使用Load(string)不会锁定文件的 PictureBox 方法。

Me.PictureBox1.Load("C:\test.png")
于 2010-01-28T17:38:09.640 回答