1

アプリに表示する画像を Bing から取得しています。Bing の指示に従い、画像の URL を正常に取得しましたが、何らかの理由でエミュレーターに表示されません。これが私が持っているものです

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]));

デバッグすると、ソースを設定した最後の 3 行でプロセスが停止しているように見えます。

4

2 に答える 2

1

了解しました。2日間のフラストレーションの後、非同期コールバックから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])); 
        });

今は動作します!

于 2012-08-09T14:55:57.543 に答える