2010-02-02 87 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 +維護該文件上的鎖定,並且無法確定性地控制該鎖定。我試了一下,這是一個痛苦的屁股解決它。 –