C # BackgroundWorker работает HTTP-сервер, изменяя элементы управления в форме потока узла - PullRequest
1 голос
/ 29 ноября 2011

Это сложный вопрос ...

У меня есть приложение C #, которое запускает HTTP-сервер в BackgroundWorker, оно позволяет пользователям вводить данные, которые должны отображаться в реальном времени на главномформа.HTTP-сервер в основном работает в цикле do / while (true), который всегда ожидает HTTP-ответа.Поэтому он должен работать в BackgroundWorker, чтобы программа не перестала отвечать при ожидании веб-пользователя.Однако, когда пользователь вводит данные, я хочу, чтобы фоновый работник обновил данные в главной форме.

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

Я думал только об использовании события ProgressChanged BW, но мне нужно передать много данных, и это было бы лучшепередать больше, чем просто строку.Могу ли я переопределить этот метод, и если я могу, как / где бы я это сделал ??

Спасибо.

1 Ответ

2 голосов
/ 30 ноября 2011

Продолжайте и используйте ProgressChanged как есть. На самом деле не имеет значения, насколько велик объект, который вы передаете в качестве параметра userState, если:

  • Это ссылочный тип (то есть не структура).
  • Фоновый процесс не изменяет свое содержимое после передачи обратно в основной поток, чтобы избежать состояния гонки.
...