2012-02-21 2 views
0

Я пишу какое-то приложение, которое отправит HTTP-запросы на сервер. Мое приложение отправит запросы с некоторым интервалом по таймеру. например, мне нужно отправить 1 тип запросов с интервалом времени 2 секунды, 2-й тип запросов - 10 секунд и так далее. Я понимаю, что лучше иметь один планировщик, который будет подталкивать мои запросы. но вопрос в том, как я могу отправлять запросы и обрабатывать ответы без зависания ui?Нужна ли мне BackgroundWorker или нет?

p.s. прямо сейчас у меня есть класс MyAdapter, который инкапсулирует всю работу с запросами и ответами и класс MyScheduler, который отправляет запросы по таймеру.

ответ

1

Вы должны тогда использовать BackGroundWorker, и если вам нужно обновить интерфейс, тем временем вы можете использовать метод Dispatcher.Invoke().

+1

Я полностью согласен с @Abbas, мой единственный комментарий к его предложению будет заключаться в том, что Dispatcher.Invoke() доступен, если ваше приложение является приложением WPF; если вы находитесь под Windows Forms, вы должны использовать 'Control.Invoke()' для безопасного взаимодействия с пользовательским интерфейсом из вашего процесса BackgroundWorker. Недавно я ответил на аналогичный вопрос: [link] (http://stackoverflow.com/questions/9370655/allowing-user-interaction/9371623#9371623). Вы можете увидеть пример использования 'Control.Invoke()'. –

+0

Спасибо за дополнительную информацию! Sidenote: «его» правильно: D – Abbas

1

но вопрос в том, как я могу отправлять запросы и обрабатывать ответы без зависания ui?

Вы можете use timers, чтобы регулярно отправлять ваши запросы. Если вам необходимо обновить свой пользовательский интерфейс после успешного завершения запроса, вам может потребоваться использовать Dispatcher.Invoke или Control.Invoke.

1

У вас есть множество вариантов для выполнения работы в фоновом режиме, в то время как пользовательский интерфейс остается отзывчивым:

  • Старый, но надежный:BackgroundWorker был вокруг .NET Framework в течение длительного времени и будет работайте отлично для ваших требований. Lots of examples можно найти на этом сайте и в других местах.

  • Современное состояние: Task класс доступен, начиная с .NET 4, является considered to be an improvement over BackgroundWorker.

  • Совершенно новый: Async extensions являются новый способ сделать «фоновый материал». Нет необходимости в многопоточной и ручной синхронизации, все «просто работает». Тем не менее, это только на этапе предварительного просмотра сообщества.

Смежные вопросы