Как заполнить поле списка ответом внешнего API?

#c# #windows-phone-7 #asynchronous #listbox #httpwebrequest

#c# #windows-phone-7 #асинхронный #список #httpwebrequest

Вопрос:

Я делаю запрос к API, единственный вариант, который я получаю, — это асинхронный ответ get

 var r = (HttpWebRequest)WebRequest.Create(url);
r.BeginGetResponse(new AsyncCallback(ResponseMethod), state);
  

Итак, я собрал все, что мне нужно для получения данных, и это работает. Но данные поступают в другой поток. Мой список привязан к StreamItems тому, что существует в моем MainViewModel .

 public ObservableCollection<StreamItemViewModel> StreamItems { get; private set; }
  

Но я нахожусь в другом потоке, поэтому я не могу напрямую получить доступ к этому свойству, чтобы добавить к нему новые значения. Когда я пытаюсь:

 StreamItems.Add(new StreamItemViewModel
{
    Content = responseContent
});
  

Я получаю:

 UnauthorizedAccessException - Invalid cross-thread access.
  

Как я могу добавить значения, которые я получил из запроса?

Ответ №1:

Вы должны сделать это в потоке пользовательского интерфейса — для этого вы можете использовать Dispatcher.BeginInvoke() :

 Dispatcher.BeginInvoke(() =>
{
  StreamItems.Add(new StreamItemViewModel
  {
      Content = responseContent
  });
});