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