[英]File.Delete on bitmap doesn't work because the file is being used by another process (I used bitmap.Dispose();)
我正在用C#創建Windows窗體應用程序。
我在窗體上有一些按鈕,並使用BackgroundImage
屬性在它們上設置位圖圖像。
我想動態地更改這些圖像,以便:
我using (bitmap = new Bitmap...)
並保存了新的位圖圖片。
我將新的位圖分配到按鈕上。
然后,我嘗試通過調用Dispose()
然后刪除System.IO.File.Delete(nameToDelete)
刪除舊的位圖;
問題: File.Delete
函數引發異常: “文件正在被另一個進程使用” ,我無法刪除它。
我還嘗試調用GC.Collect()
並將位圖分配為null
但是它不起作用。
我發現的唯一“解決方案”是在刪除之前調用Thread.Sleep(2)
,但這是一個修補程序,並非每次都起作用。
這是代碼(layerPics [z]是一個包含所有位圖的數組,每個按鈕一個):
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;
我能做什么? 謝謝!
導致問題的原因不是Bitmap
,而是以下行:
Buttons.BackgroundImage = Image.FromFile(name);
在這里,您使用工廠方法FromFile()
創建Image
類的實例。 該文件將保持鎖定,直到處理完Image
為止。
這是參考 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.