我正在打开一个名为tempImage.jpg的文件,并将其显示在PictureBox中的表单上。然后我单击一个名为Clear的按钮,使用PictureBox2.Image = Nothing从PictureBox中删除文件,但是当它被锁定打开时我无法删除该文件。我如何发布它以便删除它?我正在使用VB.NET和表单应用程序。
由于
答案 0 :(得分:7)
当您使用PictureBox2.Image = Nothing
时,您正在等待垃圾收集器在释放资源之前完成资源。您想立即释放它,因此您需要处理图像:
Image tmp = PictureBox2.Image
PictureBox2.Image = Nothing
tmp.Dispose()
答案 1 :(得分:3)
如果您使用的是Image.FromFile,则需要在图像上调用.Dispose()。当你去清除它时,做一些像......
Image currentImage = pictureBox.Image
pictureBox.Image = Nothing
currentImage.Dispose()
那将释放文件。
答案 2 :(得分:1)
控制文件
'to use the image
Dim fs As New IO.FileStream("c:\foopic.jpg", IO.FileMode.Open, IO.FileAccess.Read)
PictureBox1.Image = Image.FromStream(fs)
'to release the image
PictureBox1.Image = Nothing
fs.Close()
答案 3 :(得分:0)
是否相当于在vb.net中使用
这就是我在c#中所做的事情
using( filestream fs = new filestream)
{
//whatever you want to do in here
}
//closes after your done
答案 4 :(得分:0)
由于我还没有发表评论(经验值不够),这就是上述问题的答案 “有没有相当于在vb.net中使用”
是的,在.Net 2.0及更高版本中,您可以使用“使用”。 但是在.Net 1.0和1.1中,如果finally块中的对象
,则需要处理 Dim fs As System.IO.FileStream = Nothing
Try
'Do stuff
Finally
'Always check to make sure the object isnt nothing (to avoid nullreference exceptions)
If fs IsNot Nothing Then
fs.Close()
fs = Nothing
End If
End Try
在finally块中添加流的关闭可确保它无论如何都会被关闭(与连接打开相反,在流关闭之前一行代码被轰炸,并且流保持打开状态锁定文件)