2011-10-02 35 views
1

我想提出一個API的請求,我得到的唯一的選擇是異步響應得到如何用外部API響應填充ListBox?

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. 

我怎樣才能補充一點,我從請求得到了價值?

回答

3

你必須這樣做,在UI線程上 - 對於您可以使用Dispatcher.BeginInvoke()

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