2010-02-02 53 views
0

好吧我是VB.NET和桌面应用程序开发的新手。简化这就是我的应用程序发生的事情:.NET应用程序锁定文件

Dim Files() As New List(Of IO.FileInfo) 
Files.Add((New IO.FileInfo("C:\img1.jpg"))) 
Files.Add((New IO.FileInfo("C:\img2.jpg"))) 
'Picture is a Windows.Forms.PictureBox in my WinForm ' 
Picture.Image = New System.Drawing.Bitmap(Files(0).FullName) 
Picture.image = Nothing 
CurrentFile = Files(0) 
'Show next pic (img2)' 
Files.RemoveAt(0) 
Picture.Image = New System.Drawing.Bitmap(Files(0).FullName) 
'Move img1 to other location ' 
CurrentFile.MoveTo("C:\other\img1.jpg") 

最后一行将抛出一个异常说IMG1不能移动,因为它正在使用中。所以我的应用程序仍在使用它,但如何让我的应用程序停止锁定文件?没有任何保留(据我所知)

回答

6

有罪党是位图。构造函数Bitmap(string)确实导致位图在文件上保持锁定,直到位图被丢弃。请参阅remarks in the docs

文件保持锁定状态,直到位图处理完毕。

要解决此问题,请将位图(如果已完成)置入,或手动将文件中的字节从文件加载到MemoryStream中,并从MemoryStream中加载位图。 (同样,构造函数Bitmap(Stream)要求Stream保持打开状态,所以您无法通过文件创建FileStream;您需要将这些字节加载到内存中,并保留MemoryStream,直到完成Bitmap )

+0

即使配置有时也不起作用。 GDI +维护该文件上的锁定,并且无法确定性地控制该锁定。我试了一下,这是一个痛苦的屁股解决它。 –