4

source プロパティを毎秒設定して画像を更新しようとしていますが、これは機能しますが、更新時にちらつきが発生します。

CurrentAlbumArt = new BitmapImage();
CurrentAlbumArt.BeginInit();
CurrentAlbumArt.UriSource = new Uri((currentDevice as AUDIO).AlbumArt);
CurrentAlbumArt.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
CurrentAlbumArt.EndInit();

設定しないIgnoreImageCacheと、画像が更新されないため、ちらつきもありません。

この警告を回避する方法はありますか?

乾杯。

4

1 に答える 1

4

次のコード スニペットは、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));
于 2013-08-18T19:01:26.940 に答える