VB.NET如何发布打开的文件?

时间:2009-04-16 13:09:32

标签: vb.net

我正在打开一个名为tempImage.jpg的文件,并将其显示在PictureBox中的表单上。然后我单击一个名为Clear的按钮,使用PictureBox2.Image = Nothing从PictureBox中删除文件,但是当它被锁定打开时我无法删除该文件。我如何发布它以便删除它?我正在使用VB.NET和表单应用程序。

由于

5 个答案:

答案 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块中添加流的关闭可确保它无论如何都会被关闭(与连接打开相反,在流关闭之前一行代码被轰炸,并且流保持打开状态锁定文件)