2012-08-07 22 views
1

我從Bing獲取圖像以顯示在我的應用程序中。我遵循Bing的指示,我成功地檢索了圖像的URL,但出於某種原因,模擬器不會顯示它們!下面是我有Windows Phone,在異步回調上設置圖像源不起作用?

var bingContainer = new Bing.BingSearchContainer(new Uri("https://api.datamarket.azure.com/Bing/Search/")); 

      var accountKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
      bingContainer.Credentials = new NetworkCredential(accountKey, accountKey); 

      var imageQuery = bingContainer.Image("porsche", null, null, null, null, null, "Size:Medium"); 

      imageQuery.BeginExecute(new AsyncCallback(this.ImageResultLoadedCallback), imageQuery); 

然後,我讓我的圖片,並嘗試在這裏設置:

var imageQuery = (DataServiceQuery<Bing.ImageResult>)ar.AsyncState; 

     var enumerableImages = imageQuery.EndExecute(ar); 
     var imagesList = enumerableImages.ToList(); 

     List<String> imList = new List<String>(); 

     while (imList.Count != 3) 
     { 
      Bing.ImageResult tr = imagesList.First<Bing.ImageResult>(); 
      if (tr.ContentType == "image/jpeg") 
      { 
       imList.Add(tr.MediaUrl); 
      } 
      imagesList.RemoveAt(0); 
     } 

     image1.Source = new BitmapImage(new Uri(@imList[0])); 
     image2.Source = new BitmapImage(new Uri(@imList[1])); 
     image3.Source = new BitmapImage(new Uri(@imList[2])); 

當我調試,過程似乎只停留在哪裏設置的最後三個行資源。

回答

0

您確定MediaUrl正在將圖片返回到正確的網址嗎?如果你使用一些硬編碼的URL到imList列表中的圖像,圖像會在image1,image2和image3中正確加載嗎?我要說的是,也許數據的質量是不正確的。也就是說,儘管您的查詢執行得很好,但MediaURL不包含格式正確的URL。

此外,當調試器停止時會發生什麼異常?

1

好的,經過兩天的挫折,我發現你不能從異步回調訪問UI線程。 VS沒有給出任何錯誤,但圖像沒有顯示。異步回調與主UI線程一起運行,因此無法訪問或更改UI中的元素。簡單的解決方法只是涉及包裝訪問的UI這樣的代碼行:

Dispatcher.BeginInvoke(() => 
     { 
      image1.Source = new BitmapImage(new Uri(@imList[0])); 
      image2.Source = new BitmapImage(new Uri(@imList[1])); 
      image3.Source = new BitmapImage(new Uri(@imList[2])); 
     }); 

它現在!