2013-05-15 77 views
0

我有返回BitmapImage功能:位圖已刪除但仍可見?

private BitmapImage dfa2bmp(DFA dfa) 
    { 
     //[...] 
     //myGraph.png generated here[...] 
     BitmapImage bmp = new BitmapImage(); 
     bmp.BeginInit(); 
     bmp.CacheOption = BitmapCacheOption.OnLoad; 
     bmp.UriSource = new Uri(graphvizDir + "\\myGraph.png"); 
     bmp.EndInit(); 
     File.Delete(graphvizDir + "\\myGraph.png"); 

     return bmp; 
    } 

所以每次調用後,文件myGraph.png是不同的。但是,當我將返回值dfa2bmp指定給Image控件時,即使在之前調用函數期間它仍被刪除,我仍然會得到舊圖像。

我在做什麼錯?

回答

0

bmp.CacheOption = BitmapCacheOption.OnLoad;該行將圖像緩存到RAM中,然後從那裏顯示。文檔說,

加載時將整個圖像緩存到內存中。圖像數據的所有請求都從內存存儲中填充。

如果要防止程序在刪除圖像後使用圖像,請將BitmapCacheOption更改爲無。所以; bmp.CacheOption = BitmapCacheOption.None;會做你想做的。

編輯:我不知道這會有什麼副作用,我沒有真正處理這些庫,但是當您嘗試將已刪除的圖像分配給圖像控件時,我發現有一些異常。我認爲更好的解決方案可能是將對象設置爲null,這將導致GC釋放包含圖像的內存。

0

您需要將BitmapCreateOptions設置爲IgnoreImageCache

bmp.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 

您使用BitmapCreateOptions.IgnoreImageCache當你有需要刷新一個圖像

// Summary: 
    //  Loads images without using an existing image cache. This option should only 
    //  be selected when images in a cache need to be refreshed. 
    IgnoreImageCache = 8, 
相關問題