如何检测加载失败的BitmapImage

本文关键字:加载 失败 BitmapImage 检测 何检测 | 更新日期: 2023-09-27 18:24:41

我有以下代码从url加载图像。如果url不存在,则应加载占位符。

public BitmapImage Image
{
    get
    {
        if (m_image == null)
        {
            try
            {
                BitmapImage image = new BitmapImage();
                image.BeginInit();
                image.UriSource = new Uri(m_photoPath);
                image.DecodePixelHeight = s_imagePixelHeight;
                image.EndInit();
                m_image = image;
            }
            catch (FileNotFoundException)
            {
                BitmapImage image = new BitmapImage();
                image.BeginInit();
                image.UriSource = new Uri(c_placeholderImagePath);
                image.DecodePixelHeight = s_imagePixelHeight;
                image.DecodePixelWidth = s_imagePixelWidth;
                image.EndInit();
                m_image = image;
            }
        }
        return m_image;
    }
}

我得到了一个最奇怪的错误——当m_photoPath是一个在任何浏览器中导致404的url时,都不会引发异常。我尝试过使用HttpWebRequest来检查文件是否存在,但每次调用[HttpWebRequest instance].GetResponse()时,都会有一个非常非常长的超时(可能是无限的——我还没有等过)。所以HttpWebRequest不是一个选项。有什么想法吗?

如何检测加载失败的BitmapImage

如果图像下载失败,BitmapImage的DownloadFailed事件将触发。没有引发异常。您可以随时连接事件,不过在调用EndInit之前进行连接是很实用的!

这真的无法通过异常来处理,因为在未来的任何时候,都可能会有人放弃下载图像——没有地方可以真正设置try/catch块。