2011-10-02 2 views
1

, 내가 얻을 수있는 유일한 옵션은 그래서, 내가 데이터를 얻을하는 데 필요한 모든 기능을 내장 응답을외부 API 응답으로 ListBox를 채우는 방법? 내가 API에 요청하고

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

을 얻을 비동기이며, 그것은 노력하고 있습니다. 그러나 데이터는 다른 스레드에서 수신됩니다. 내 ListBox 내 MainViewModel에있는 StreamItems 바인딩되어 있습니다.

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 
    }); 
}); 
관련 문제