2014-02-12 20 views
0

我跟法師源打在WPF和嘗試這個簡單的測試,看看能不能買到什麼幸運:爲什麼從服務器加載圖像的簡單代碼不起作用?

var test = new BitmapImage(new Uri("https://thenotebook.org/sites/default/files/fallCartoon.jpg")); 
看着調試窗口中測試時

,它的所有屬性都設置爲null,因此它似乎沒有加載圖像。爲什麼?

+0

你能在同一個URI你的瀏覽器打開該影像?如果單獨創建URI然後將其饋送到Bitmap會發生什麼? –

+0

是的,我可以。我這樣做是爲了確保它是一個有效的uri。 – mans

回答

0

BitmapImage異步加載網絡數據。這意味着它在後臺開始下載時立即返回。所以你的代碼可能沒有問題。檢查IsDownloading屬性。訂閱DownloadCompletedDownloadFailed事件。根據我們的意見

同步版本:

var bytes = new WebClient().DownloadData("https://thenotebook.org/sites/default/files/fallCartoon.jpg"); 
var test = new BitmapImage(); 
test.BeginInit(); 
test.StreamSource = new MemoryStream(bytes); 
test.EndInit(); 
Console.WriteLine(test.PixelWidth); 
Console.WriteLine(test.PixelHeight); 
+0

謝謝。我有什麼方法可以同步嗎?我試過chacheoption並將它設置爲None,但沒有區別 – mans

+0

我不認爲這是可能的。它已被問:已經問:http://stackoverflow.com/questions/3659574/synchronously-download-an-image-from-url。我會用WebClient下載文件,並從內存流中初始化位圖。所以你不需要保存一個臨時文件。 – fejesjoco

0

繼fejesjoco的建議是:

public static BitmapImage ImageFromUriSync(string uri) 
{ 
    using(var client = new WebClient()) 
    { 
     byte[] data = client.DownloadData(uri); 

     using(var stream = new MemoryStream(data)) 
     { 
      var img = new BitmapImage(); 
      img.BeginInit(); 
      img.CacheOption = BitmapCacheOption.OnLoad; 
      img.StreamSource = stream; 
      img.EndInit(); 

      return img; 
     } 
    } 
} 
相關問題