Фоновый рабочий процесс или поток? - PullRequest
2 голосов
/ 27 августа 2009

У меня есть приложение Winform, которое перечисляет партию счетов в виде сетки. Пользователи выбирают партию и нажимают кнопку «Сформировать счета». Процесс занимает около 4-5 минут. Пока он работает, у меня будет полоса прогресса и я хочу отключить все кнопки.

Должен ли я использовать BackgroundWorker Process или создать новый поток для выполнения этой задачи?

Ответы [ 5 ]

5 голосов
/ 27 августа 2009

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

Нет причин создавать для этого собственную ветку. ThreadPool через BackgroundWorker будет отлично работать.

3 голосов
/ 27 августа 2009

Фоновый рабочий процесс имеет ограниченное количество потоков (20 или 25, точно не помню), и использование одного из них выведет этот поток из строя на 4-5 минут. Обычно рекомендуется не использовать фоновый рабочий процесс для длительных задач, однако это не является проблемой, если вы запускаете только один поток за раз.

В идеальном мире я бы, вероятно, создал свой собственный поток, однако это требует усилий и понимания.

1 голос
/ 28 августа 2009

Фоновый рабочий проще и был разработан именно для вашего случая (проверьте первые несколько строк msdn) .

Так что я бы следовал принципу KISS:)

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

Относительно ограничений, упомянутых Джаймалом Чоханом: поскольку фоновый работник поддерживается пулом потоков, он имеет ограничение 25 параллельных задач, но этого должно быть достаточно для любого приложения графического интерфейса. (Если вы как-то превысите число, дальнейшее задание будет просто ждать завершения других)

1 голос
/ 27 августа 2009

Отдельный процесс, конечно, будет безопаснее: если у него есть какие-либо проблемы (сбой, бесконечные циклы, утечки или что-то еще) - эти проблемы не затронут родительский процесс.

0 голосов
/ 27 августа 2009

Если у вас есть утечки памяти в рабочем, конечно, фоновый процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...