OrE*_*lse 3 vb.net file-io exception delete-file
我通过以下代码将图像添加到FlowLayoutPanel控件
Dim WithEvents Pedit As DevExpress.XtraEditors.PictureEdit
Private Sub LoadImagesCommon(ByVal fi As FileInfo)
Pedit = New DevExpress.XtraEditors.PictureEdit
Pedit.Width = 133
Pedit.Height = 98
Pedit.Image = Image.FromFile(fi.FullName)
Pedit.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom
Pedit.ToolTip = fi.Name
AddHandler Pedit.MouseClick, AddressOf Pedit_MouseClick
AddHandler Pedit.MouseEnter, AddressOf Pedit_MouseEnter
AddHandler Pedit.MouseLeave, AddressOf Pedit_MouseLeave
FlowLayoutPanel1.Controls.Add(Pedit)
End Sub
Run Code Online (Sandbox Code Playgroud)
问题是,The process cannot access the file xxxx because it is being used by another process.当我尝试删除上一步中加载的图像时,我收到以下错误.
FlowLayoutPanel1.Controls.Clear()
FlowLayoutPanel1.Refresh()
For Each fi As FileInfo In New DirectoryInfo(My.Settings.TempDirectory).GetFiles
RemoveHandler Pedit.MouseClick, AddressOf Pedit_MouseClick
RemoveHandler Pedit.MouseEnter, AddressOf Pedit_MouseEnter
RemoveHandler Pedit.MouseLeave, AddressOf Pedit_MouseLeave
File.Delete(fi.FullName)
Next
Run Code Online (Sandbox Code Playgroud)
那我在这里做错了什么?
啊哈!谢谢康拉德.
经过一番阅读,我发现了另一种解决方法.
Dim fs As System.IO.FileStream
fs = New System.IO.FileStream(fi.FullName, IO.FileMode.Open, IO.FileAccess.Read)
Pedit.Image = System.Drawing.Image.FromStream(fs)
fs.Close()
Run Code Online (Sandbox Code Playgroud)
更新: 这是Konrad建议的内容.对于那里的所有新手,就像我一样:)
Dim imgTemp As System.Drawing.Image
imgTemp = System.Drawing.Image.FromFile(strFilename, True)
Pedit.Image = New System.Drawing.Bitmap(imgTemp)
imgTemp.Dispose()
Pedit.Image.Save(strFilename)
Run Code Online (Sandbox Code Playgroud)
这是更好的,因为Image对象不能在FileStream关闭后调用其Save方法.