2011-10-25 144 views
0

我使用綁定到UI上的圖像屬性的viewmodel,並且viewmodel包含ImageSource屬性。我使用下面的函數WPF凍結BitmapImage不顯示

private BitmapImage GetImageFromUri(Uri urisource) 
    { 
     if (urisource == null) 
      return null; 

     var image = new BitmapImage(); 
     image.BeginInit(); 
     image.UriSource = urisource; 
     image.EndInit(); 
     image.Freeze(); //commenting this shows the image if the routine is called from the proper thread. 

     return image; 
    } 

對於一些奇怪的原因,在下面的代碼,當我打電話凍結我的BitmapImage,它不會出現在主window.I得不到異常或死機設置該屬性。任何人都可以幫助我嗎? 我設置圖像屬性異步,所以我需要能夠使用創建的圖像,假設GetImageFromUri調用是從一個線程以外的UI線程。

回答

0

凍結之前,您需要完全呈現它。
您應該嘗試聆聽SourceUpdated事件,然後才凍結圖像。

在附註中,如果您想在此之後修改圖像,則必須克隆它。

+0

你是什麼意思呈現它? – ak3nat0n

+0

以圖形方式呈現。設置源代碼不會使其可視化,WPF首先需要渲染圖像。看起來你在WPF得到機會之前凍結了它。 –

2

嘗試在凍結BitmapImage之前設置CacheOption。看看這是否可行 -

var image = new BitmapImage(); 
image.BeginInit(); 
image.CacheOption = BitmapCacheOption.OnLoad; 
image.UriSource = urisource; 
image.EndInit(); 
image.Freeze();