Car*_*rlo 8 c# concurrency windows-phone-7
基本上,我从WebService获取一些数据,而在ResponseCallback中,我正在尝试使用从响应中获得的结果填充ObservableCollection,但是UnauthorizedAccessException当我尝试这样做时,我得到了"无效的跨线程访问" .
当我得到结果时,填充所述可观察集合的最佳方法是什么?
谢谢!
这是代码:
public ObservableCollection<Person> People { get; set; }
private void ResponseCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
string responseString = string.Empty;
using (Stream content = response.GetResponseStream())
{
if (request != null && response != null)
{
if (response.StatusCode == HttpStatusCode.OK)
{
XDocument document = XDocument.Load(content);
var people = from p in document.Descendants()
where p.Name.LocalName == "PersonInfo"
select Person.GetPersonFromXElement(p);
foreach (Person person in people)
{
this.People.Add(person); // this line throws the exception
}
}
}
content.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
jum*_*mbo 14
我在WP7上遇到了完全相同的问题.它可以通过Mick N建议的代码来解决,而不需要继承DO.从静态部署类中获取Dispatcher.
Deployment.Current.Dispatcher.BeginInvoke( () => { //your ui update code } );
但这似乎是一种奇怪的解决方案,我永远不必在桌面Silverlight中这样做.
这个WP7是特定的还是有更好的解决方案?谢谢.