从URL缓存图像时显示加载
本文关键字:显示 加载 图像 URL 缓存 | 更新日期: 2023-09-27 18:28:11
我在WPF C#中有一个代码,我用它从web加载图像,如下所示:
if (myImgURL != "")
{
var imgBitmap = new BitmapImage();
imgBitmap.BeginInit();
imgBitmap.UriSource = new Uri(myImgURL, UriKind.RelativeOrAbsolute);
imgBitmap.CacheOption = BitmapCacheOption.OnLoad;
imgBitmap.EndInit();
myImgControl.Source = imgBitmap;
}
它工作得很好,但有时需要一段时间才能显示图像(如果互联网速度很慢的话)。如何在加载图像时显示ProgressRing(来自Mahapps.Metro工具包)并启用它,然后在显示图像时消失?
我不知道在下载图像和完全加载图像时有任何事件触发。
查看类BitmapSource(BitmapImage的基类)中的以下事件:
- 下载进度
- 下载完成
- 下载失败
只是一张纸条。您正在从Uri创建BitmapImage并立即显示它。因此,不需要设置BitmapCacheOption.OnLoad
(只有当您从应该在EndInit
之后立即关闭的流加载时,才需要使用afaik)。所以你可以这样缩短你的代码:
if (!string.IsNullOrEmpty(myImgURL))
{
var imgBitmap = new BitmapImage(new Uri(myImgURL));
myImgControl.Source = imgBitmap;
if (imgBitmap.IsDownloading)
{
// start download animation here
imgBitmap.DownloadCompleted += (o, e) =>
{
// stop download animation here
};
imgBitmap.DownloadFailed += (o, e) =>
{
// stop download animation here
};
}