从URL缓存图像时显示加载

时间:2013-08-19 19:06:09

标签: c# wpf image loading mahapps.metro

我在WPF C#中有一个代码,我用它来加载来自网络的图像:

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

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

1 个答案:

答案 0 :(得分:0)

看一下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
        };
    }