以下代码片段在将 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 并Source
在 Dispatcher 中分配来注意正确的跨线程访问。
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));