Windows Phone 7中ResponseCallback中的跨线程访问问题

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是特定的还是有更好的解决方案?谢谢.