Асинхронный возврат фида XML - PullRequest
0 голосов
/ 27 апреля 2011

Я пытаюсь выполнить асинхронный возврат данных на внешней XML-странице, используя LINQ to XML, чтобы затем выполнить для каждого цикла (я ищу, чтобы создать новую страницу для каждого элемента, поэтому каждый элемент в 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 Ответ

3 голосов
/ 27 апреля 2011

Вы можете просто выполнить загрузку в BackgroundWorker .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...