2011-10-25 24 views
0

UIのイメージプロパティにバインドされたビューモデルを使用しています。ビューモデルにImageSourceプロパティが含まれています。私は私が私のBitmapImageの凍結を呼び出すとき、例外またはクラッシュを取得していない主なwindow.Iに表示されない、次のコードでは、以下の機能をいくつかの奇妙な理由で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; 
    } 

を使用して、そのプロパティを設定します。誰も私にこれを助けることができますか? イメージプロパティを非同期に設定しているので、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(); 
関連する問題