Я пытаюсь выполнить асинхронный возврат данных на внешней 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; });
}
}
}