在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);
這里記錄一下,以后主要就用這種方式了。