从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工具包)并启用它,然后在显示图像时消失?

我不知道在下载图像和完全加载图像时有任何事件触发。

从URL缓存图像时显示加载

查看类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
        };
    }