Фоновая нить Silverlight с использованием WebClient - PullRequest
0 голосов
/ 01 декабря 2010

Я использую WebClient для асинхронного получения информации от моего веб-сервиса:

    wc.DownloadStringCompleted += DownloadStringCompleted;
    wc.DownloadStringAsync(service);

Я отлично работаю, но я думаю, что метод DownloadStringCompleted работает в потоке пользовательского интерфейса, и, поскольку я выполняю там много разборов, моей странице требуется несколько секунд, чтобы появиться. Однако, поскольку у меня есть такие фиксированные данные и индикатор выполнения, я не возражаю, чтобы они появлялись мгновенно.

Как я мог это осуществить?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 декабря 2010

Используйте HttpWebRequest вместо WebClient.HWR не возвращается в поток пользовательского интерфейса и не блокирует его обновление.

1 голос
/ 01 декабря 2010

WebClient действительно возвращается в потоке пользовательского интерфейса, так что да, ваш анализ будет блокировать пользовательский интерфейс. По соображениям производительности рекомендуется использовать вместо HttpWebRequest.

При HttpWebReques t ваше событие будет запускаться в фоновом потоке, чтобы вы могли выполнить всю необходимую обработку, однако у вас возникла проблема перенаправления результатов обратно в поток пользовательского интерфейса, чтобы вы могли обновить пользовательский интерфейс (в противном случае вы увидите исключения нарушения перекрестных потоков). Вы можете использовать Dispatcher для маршалинга результатов обратно в пользовательский интерфейс с помощью метода, подобного следующему:

private void UpdateUI(Results results)
{
    if (!Deployment.Current.Dispatcher.CheckAccess())
        Deployment.Current.Dispatcher.BeginInvoke(() => UpdateUI(results));
    else
    {
        //Update the UI
    {
}
0 голосов
/ 24 января 2012

В Mango WebClient изменяется так, что если из фонового потока выполняется вызов

wc.DownloadStringAsync(service);

, ответ также поступает в фоновый поток.Вы можете использовать BackgroundWorker для достижения этой цели.

...