如何检测无法加载的BitmapImage?

时间:2013-07-23 23:54:56

标签: c# wpf

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

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的网址时,不会抛出任何异常。我已经尝试使用HttpWebRequest来检查文件是否存在,但是每当我调用[HttpWebRequest instance].GetResponse()时,都会有一个非常非常长的超时(可能是无限的 - 我没有等到找出来)。所以HttpWebRequest不是一个选择。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果图像无法下载,则会触发BitmapImage的DownloadFailed事件。没有异常被抛出。您可以随时连接事件,但在调用EndInit之前执行它是务实的。

这可能无法真正处理异常,因为有些事情可能会放弃在未来的任意点下载图像 - 没有任何地方可以放置try / catch块。