次のコード スニペットは、Image のプロパティを新しい BitmapImageに設定する前に、イメージ バッファー全体をダウンロードします。Source
これにより、ちらつきがなくなります。
var webClient = new WebClient();
var url = ((currentDevice as AUDIO).AlbumArt;
var bitmap = new BitmapImage();
using (var stream = new MemoryStream(webClient.DownloadData(url)))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
image.Source = bitmap;
ダウンロードに時間がかかる場合は、別のスレッドで実行することをお勧めします。Freeze
次に、BitmapImage を呼び出して Dispatcher で割り当てることにより、適切なクロススレッド アクセスに注意する必要がありますSource
。
var bitmap = new BitmapImage();
using (var stream = new MemoryStream(webClient.DownloadData(url)))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
bitmap.Freeze();
image.Dispatcher.Invoke((Action)(() => image.Source = bitmap));