如何使用外部API响应填充ListBox?

时间:2011-10-02 15:32:13

标签: c# windows-phone-7 asynchronous listbox httpwebrequest

我正在向API发出请求,我得到的唯一选择是异步获取响应

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

所以,我构建了获取数据所需的一切,并且它正在运行。但是数据是在不同的线程中接收的。我的ListBox绑定到StreamItems中存在的MainViewModel

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

但是我在一个不同的线程中,所以我无法直接访问此属性来为其添加新值。当我尝试:

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

我明白了:

UnauthorizedAccessException - Invalid cross-thread access.

如何添加我从请求中获得的值?

1 个答案:

答案 0 :(得分:3)

您必须在UI线程上执行此操作 - 您可以使用Dispatcher.BeginInvoke()

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