WP7 - доступ к потоку пользовательского интерфейса?

Как мне получить доступ к потоку пользовательского интерфейса приложения WP7?
Я использую следующий код, если он помогает.


    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
    {
        AcquireNews(l => { listBox1.Items.Add(l[0]); });
        // Here is where I get an exception saying "Invalid cross-thread access."
    }

    void AcquireNews(Action<List<object>> callback)
    {
        var r = HttpWebRequest.Create("http://www.google.com") as HttpWebRequest;

        r.BeginGetResponse(result =>
            {
                var response = r.EndGetResponse(result);

                List<object> l = new List<object>();

                var s = response.GetResponseStream();

                var buffer = new byte[s.Length];

                s.Read(buffer, 0, (int)s.Length);

                l.Add(System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length));

                callback(l);
            },
        null);
    }

person Vercas    schedule 10.12.2010    source источник


Ответы (1)


Для этого можно использовать Диспетчер.

Dispatcher.BeginInvoke( () => { /* Your UI Code - ie Callback() or listbox.items.add */ } );
person Mick N    schedule 10.12.2010
comment
Спасибо за это решение :) Не забудьте использовать Deployment.Current.Dispatcher.BeginInvoke, а не System.Threading (как я) :) - person Nicklas Møller Jepsen; 12.01.2012