每秒钟更新一次BitmapImage
本文关键字:一次 BitmapImage 更新 每秒钟 | 更新日期: 2023-09-27 18:28:02
我试图通过每秒设置源属性来更新图像,但这很有效,但在更新时会导致闪烁。
CurrentAlbumArt = new BitmapImage();
CurrentAlbumArt.BeginInit();
CurrentAlbumArt.UriSource = new Uri((currentDevice as AUDIO).AlbumArt);
CurrentAlbumArt.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
CurrentAlbumArt.EndInit();
如果我不设置IgnoreImageCache
,则图像不会更新,因此也不会闪烁。
有办法绕过这个警告吗?
干杯。
在将image的Source
属性设置为新的BitmapImage之前,以下代码片段下载整个图像缓冲区。这样可以消除任何闪烁。
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;
如果下载需要一些时间,那么在单独的线程中运行它是有意义的。然后,您还必须通过在BitmapImage上调用Freeze
并在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));