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

当我调试时,该过程似乎只是在我设置源的最后三行停止。

4

2 回答 2

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

现在可以了!

于 2012-08-09T14:55:57.543 回答
0

您确定 MediaUrl 正在将正确的网址返回到图像吗?如果您对 imList 列表中的图像使用一些硬编码的 url,图像会在 image1、image2 和 image3 中正确加载吗?我要说的是,数据的质量可能不正确。也就是说,尽管您的查询执行良好,但 MediaURL 不包含格式正确的 URL。

另外,调试器停止时会出现什么异常?

于 2012-08-08T05:29:32.183 回答