I'm using the following line of code to open an Image
from a file:
pictureBox1.Image = Image.FromFile("test.png");
I expect it to lock the file, load the image to memory, set pictureBox1.Image
to the copy in memory, and release the lock. In reality, the lock won't go away until I Dispose()
of the Image
in memory. I can not release the lock on the file on the harddrive that I am no longer using until I get rid of the file in memory that I am using.
Microsoft's site mentions it in a C#-labeled article, but their solution is written in visual basic, which is useless to me.
In summary:
I want to set pictureBox1.Image
to the image stored in "test.png"
, then let the user edit or delete "test.png"
or whatever.
Or better yet, use a
using
statement (the code below is otherwise copied from sylon's [deleted] post). This way if theImage.FromStream
throws an exception, you can still be assured that the stream is immediately closed.The easiest ever way I found is to freeze the object that contains the Source (path to the file). All controls that can contain an image, seem to have a .Source which, if not null, it will lock the file it points to.
Now the trick is to change the Image control to a "read-only" state, which then unlocks the file.
My solution:
The approach with stream is not correct.
See here https://stackoverflow.com/a/8701748/355264
Correct code from above link:
talking open, read and release
You can also use a stream to read the image then close the stream.