Является ли BackgroundWorker хорошим заменителем AsyncOperationManager?

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

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

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

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

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

3 ответа

Решение

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

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

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

Другие вопросы по тегам