Улучшение отзывчивости пользовательского интерфейса с отдельным рабочим потоком для асинхронных задач - PullRequest
2 голосов
/ 24 июля 2011

Мое приложение silverlight извлекает два набора файлов из веб-службы asmx (скажем, набор A и набор B, набор A имеет несколько файлов и набор B имеет большое количество файлов) асинхронно. При получении каждого файла в наборе он должен быть проанализирован, а некоторые структуры данных должны быть обновлены. Как только весь набор A получен, в веб-службу поступает асинхронный запрос на выборку набора B.

При получении набора A приложение готово к использованию. Но так как файлы все еще принимаются из набора B, пользовательский интерфейс не очень отзывчив. Есть ли способ улучшить отзывчивость, пока файлы выбираются и обрабатываются в фоновом режиме. Работает ли async_task_completed с обработчиками веб-сервиса в разных потоках. Имеет ли смысл иметь BackgroundWorker нить?

РЕДАКТИРОВАТЬ: просто чтобы уточнить, асинхронный запрос для набора (сотни файлов) отправляются вместе.

1 Ответ

2 голосов
/ 24 июля 2011

Возьмите догадку из уравнения. Просто временно вставьте эту строку в код завершения вызовов веб-службы.

MessageBox.Show(Deployment.Current.Dispatcher.CheckAccess().ToString());

Если вы видите «True», вы находитесь в потоке пользовательского интерфейса, и вам (по крайней мере) необходимо отключить его для выполнения обработки. Поскольку вы предлагаете простой способ сделать это, используйте BackgroundWorker.

Если вы видите «False», вы уже находитесь в фоновом потоке, поэтому у вас проблемы с производительностью из другого источника.

...