Тема BackgroundWorker - C # - PullRequest
       26

Тема BackgroundWorker - C #

2 голосов
/ 12 февраля 2010

Мне нужно выполнить 3 асинхронных операции параллельно внутри службы Windows NT (используя .Net2.0 / C #). Для этого я использую компонент Backgroundworker.

  1. Это хороший вариант / подход?
  2. Для непрерывной работы я снова вызываю RunWorkerAsync () в событии RunWorkerCompleted.

Пожалуйста, предложите мне.

Ответы [ 3 ]

1 голос
/ 12 февраля 2010

Обычно BackgroundWorker используется, когда вам необходимо RunWorkerCompleted для выполнения обновлений в графическом интерфейсе. По крайней мере, так я это использовал. Похоже, вы хотите, чтобы это работало постоянно, так почему бы не использовать обычный рабочий поток?

Самая большая проблема, которую я вижу, заключается в том, что BackgroundWorker использует пул потоков .NET, поэтому, если вы действительно хотите, чтобы это работало непрерывно, вы просто гарантированно используете один из потоков пула потоков, число которых ограничено. имеется.

1 голос
/ 12 февраля 2010

Обычно BackgroundWorker используется для длительных операций. Если вам просто нужно выполнить 3 задачи параллельно, вы можете использовать простые потоки.

0 голосов
/ 05 июля 2010

Я бы не использовал фоновых работников для работы, которую вы здесь описываете.

Фоновый рабочий предназначен для использования в некоторых «длительных» операциях при сохранении отзывчивого пользовательского интерфейса. Использование сервисов нарушает шаблон пользовательского интерфейса.

Для службы я бы использовал таймер и три потока.

Пусть таймер проверит наличие трех потоков и перезапустит их или сообщит об ошибках при необходимости. Три потока могут выполнять свою работу в цикле while (не забудьте добавить туда sleep (0))

...