1

我有以下代码从 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不是一个选择。有任何想法吗?

4

1 回答 1

2

如果图像下载失败,则会触发 BitmapImage 的DownloadFailed事件。不会抛出异常。您可以随时连接事件,但在调用 EndInit 之前这样做会很实用!

这实际上无法通过异常处理,因为将来任何时候都可能会放弃下载图像 - 真的没有地方可以放置 try/catch 块。

于 2013-07-24T00:16:43.383 回答