2013-07-23 108 views
1

我有以下代碼從一個url加載圖像。如果url不存在,則應該加載佔位符。如何檢測未能加載的BitmapImage?

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不是一個選項。有任何想法嗎?

+0

我建議編輯包括添加WPF標記。我希望這是準確的 - 請以不同的方式標記它! – doppelgreener

回答

2

如果圖像無法下載,則會觸發BitmapImage的DownloadFailed事件。沒有例外被拋出。您可以隨時啓動事件,但在調用EndInit之前務必先做好準備!

這真的不能由一個異常來處理,因爲有些東西可能會放棄在將來的任意點上下載圖像 - 沒有地方真的放置try/catch塊。

+1

謝謝!實際上,我剛好在我自己身上發現了,並且正在回來回答自己,但你完全正確。我改變了使用那個處理程序,它工作得很好。無論如何,我最初試圖做到這一點的方式有點怪異。 –

+0

太棒了! \ o /很高興你找到了它。 – doppelgreener