Является ли BackgroundWorker хорошим заменителем AsyncOperationManager? - PullRequest
1 голос
/ 25 января 2010

Вот что я пытаюсь решить:

Мой класс (который может быть размещен приложением пользовательского интерфейса, службой Windows или чем-то еще), должен получать сообщения Windows. Где-то здесь кто-то дал предложение (и некоторый исходный код) создать форму окна в отдельном потоке, который создаст форму, и всякий раз, когда интересующее меня сообщение Windows получает на WndProc, оно вызывает делегата с использованием контекста. .Подать.

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

Из тестов, которые я провел, я ожидал бы, что он будет работать довольно хорошо, когда я использую пользовательские интерфейсы, но мой вопрос: есть ли какой-то совет против использования BackgroundWorker, когда он не работает с пользовательскими интерфейсами?

Edit: Как я себе это представляю, каждый раз, когда моя «дочерняя» форма (та, которая работает в фоновом режиме) получает сообщение, я выдаю ReportProgress. Единственное, что мне нужно пройти через потоки, это идентификатор сообщения, так что технически его должно быть достаточно, верно?

Ответы [ 3 ]

1 голос
/ 25 января 2010

BackgroundWorker и окно воды и огня. Окно требует потока STA и цикла сообщений, ни BGW не предоставляют ни того, ни другого. Проверьте мой ответ в этой теме для альтернативы.

1 голос
/ 25 января 2010

Я бы сказал, что если это не чаще, чем каждые 5 секунд, тогда у вас все будет в порядке, передавая идентификатор сообщения (как userState) через событие ReportProgress .

0 голосов
/ 25 января 2010

Объект BackgroundWorker - отличный метод для выполнения задач, которые вы хотите выполнить. Однако вы можете обнаружить, что простого идентификатора сообщения больше не достаточно при кодировании, но метод BackgroundWorker.ReportProgress позволяет передавать объект состояния. Если вы кодируете эффективный объект состояния, вы можете буквально отослать подробные снимки, чтобы отправить отчет в родительскую форму.

...