在WPF中,當我們删除打開過的圖檔時,往往會遇到"...無法删除,檔案正在被另一個程序使用"的異常。即使目前檔案是打開後關閉過的也不行。
這個問題的原因很簡單,是因為WPF的緩存政策導緻圖檔被鎖定了,解決的方式不是用預設的ImageSource的構造方法,改用如下方式:
ImageSource
getImage(string file)
{
var bmp = new
BitmapImage();
bmp.BeginInit();
bmp.CacheOption = BitmapCacheOption.OnLoad; //這一行很重要
bmp.UriSource = new
Uri(file);
bmp.EndInit();
return bmp;
}
這種方式本身并沒有什麼問題,但今天發現了更簡單的一個方法,隻要一行代碼即可:
BitmapFrame.Create(new
Uri(file), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
這裡記錄一下,以後主要就用這種方式了。