我正在向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.
如何添加我从请求中获得的值?
答案 0 :(得分:3)
您必须在UI线程上执行此操作 - 您可以使用Dispatcher.BeginInvoke()
:
Dispatcher.BeginInvoke(() =>
{
StreamItems.Add(new StreamItemViewModel
{
Content = responseContent
});
});