c# - File.Delete on bitmap doesn't work because the file is being used by another process (I used bitmap.Dispose();) -


i'm creating windows forms application in c#.

i have buttons on form , used backgroundimage property set bitmap images on them.

i wanted change images dynamiclly so:

  1. i used using (bitmap = new bitmap...) , saved new bitmap picture.

  2. i assign new bitmap on button.

  3. then, tried delete old bitmap calling dispose() , system.io.file.delete(nametodelete);

the problem: file.delete function throws exception: "file being used process" , can't delete it.

i tried calling gc.collect() , assigning bitmap null didn't work.

the "solution" find call thread.sleep(2) before deleting, it's patch , doesn't work each time.

here code (layerpics[z] array holds bitmaps, 1 each button):

string name = "new name"; bitmap bitmap; using (bitmap = new bitmap(x, y)) {     form.drawtobitmap(bitmap, new rectangle(0, 0, bitmap.width, bitmap.height));     bitmap.save(name);     button.backgroundimagelayout = imagelayout.stretch;     button.backgroundimage = image.fromfile(name); } layerpics[z].dispose(); layerpics[z] = null; layerpics[z] = bitmap; 

what can do? thanks!

it's not bitmap causes problem, line:

buttons.backgroundimage = image.fromfile(name); 

here, create instance of image class using factory method fromfile(). file remains locked until image disposed.

this the reference.


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -