XML feed的异步返回

时间:2011-04-27 10:20:49

标签: c# windows-phone-7 linq-to-xml

我正在尝试使用LINQ to XML在外部XML页面中执行异步数据返回,然后为每个循环打开一个(我正在为每个项目创建一个新页面,所以foreach项目在myData,新页面,新按钮,新标签等)

我想知道什么是获取数据的最佳类型,以便轻松执行foreach循环,以及如何执行此操作?

以下是我的XML示例。我知道在我的LINQ to XML中我需要使用名称空间,并且知道如何获取它们。

<category term="theoryDatabaseModel.questionTable" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
  <m:properties>
    <d:Id>1</d:Id>
    <d:Text>This is sample XML Text</d:Text>
    <d:ImageURL m:null="true" />
    <d:CategoryId>3</d:CategoryId>
  </m:properties>
</content>

我一直在使用以下代码将项本地获取到列表中,但现在需要异步执行。

List<CategoryFeedItem> catfeedItems = (from categories in docu.Descendants(mm + "properties")
                                            select new CategoryFeedItem()

                                         {
                                             CategoryId = categories.Descendants().ToList()[0].Value,
                                             CategoryText = categories.Descendants().ToList()[1].Value,

                                         }).ToList();

提前致谢

修改 我已经使用了这个,并将列表框中的列表带回来。 我可以用forEach解析这些数据以某种方式将其分解为逐项吗? 我也会看看BackgroundWorker,谢谢你。

public class CategoryFeedItem
{

    public string CategoryId { set; get; }
    public string CategoryText { set; get; }

}

public class CategoryFeed
{

    ListBox myCatContext;

    public void LoadCatFeed(ListBox context)
    {
        myCatContext = context;
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://mydatasource.svc"));
        request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
    }

    private static readonly XNamespace mm = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";

    private void ReadCallback(IAsyncResult asynchronousResult)
    {


        HttpWebRequest request =
          (HttpWebRequest)asynchronousResult.AsyncState;
        HttpWebResponse response =
          (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        XDocument docu = XDocument.Load(response.GetResponseStream());

        List<CategoryFeedItem> catfeedItems = (from categories in docu.Descendants(mm + "properties")
                                            select new CategoryFeedItem()

                                         {
                                             CategoryId = categories.Descendants().ToList()[0].Value,
                                             CategoryText = categories.Descendants().ToList()[1].Value,
                                         }).ToList();

        myCatContext.Dispatcher.BeginInvoke(() => { myCatContext.ItemsSource = catfeedItems; });
        }

    }
}

1 个答案:

答案 0 :(得分:3)

您只需在BackgroundWorker中进行加载。