如何检测加载失败的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的DownloadFailed事件将触发。没有引发异常。您可以随时连接事件,不过在调用EndInit之前进行连接是很实用的!
这真的无法通过异常来处理,因为在未来的任何时候,都可能会有人放弃下载图像——没有地方可以真正设置try/catch块。