簡體   English   中英

位圖上的File.Delete不起作用,因為該文件正在被另一個進程使用(我使用了bitmap.Dispose();)

[英]File.Delete on bitmap doesn't work because the file is being used by another process (I used bitmap.Dispose();)

我正在用C#創建Windows窗體應用程序。

我在窗體上有一些按鈕,並使用BackgroundImage屬性在它們上設置位圖圖像。

我想動態地更改這些圖像,以便:

  1. using (bitmap = new Bitmap...)並保存了新的位圖圖片。

  2. 我將新的位圖分配到按鈕上。

  3. 然后,我嘗試通過調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM