C # / Winform: введите данные в HTML-страницу, отправьте форму - PullRequest
2 голосов
/ 08 декабря 2008

У меня есть Winform с BackgroundWorker. BackgroundWorker, помимо прочего, должен сделать HTTP-вызов страницы, заполнить некоторые данные, отправить форму и получить HTML-код, который возвращается после «нажатия» кнопки отправки. Я столкнулся с рядом контрольно-пропускных пунктов при этом:

  1. Невозможно отправить данные, поскольку целевой веб-сервер 405 не поддерживает этот метод.
  2. Не могу снова использовать WebClient.UploadValues, поскольку веб-сервер не поддерживает POST.
  3. Невозможно использовать элемент управления WebBrowser, потому что BackgroundWorkers сосут в COM Interop, и выдается исключение, которое говорит, что он должен находиться в потоке STA (однопотоковая квартира)
  4. Невозможно запустить другой отдельный поток, потому что BW должен сидеть и ждать результата, прежде чем он сможет продолжить (Не могу, или, по крайней мере, я не знаю способ сделать это, который не потерпит крах)
  5. Невозможно изменить ApartmentState потока, потому что это BackgroundWorker, и он выдает, если сказано перейти в режим STA

Что я должен сделать, чтобы решить эту проблему?

[Редактировать]: точка входа в приложение уже помечена атрибутом [STAThread].

Ответы [ 4 ]

2 голосов
/ 08 декабря 2008

Вы пытались использовать WebClient.UploadValues ​​ с аргументом метода, установленным в «GET»?

0 голосов
/ 08 декабря 2008

Я совершенно не уверен, о чем ты действительно спрашиваешь. Если вы запускаете фоновый процесс и он не работает, вы получаете об этом сообщение через RunWorkerCompletedEvent. Если вы затем посмотрите на аргументы событий, вы можете сказать, был ли процесс успешным или нет (через свойство RunWorkerCompletedEventArgs.Error).

В зависимости от ошибки вы можете повторно запустить запрос или отобразить ошибку пользователю.

Надеюсь, я не совсем не в курсе.

0 голосов
/ 08 декабря 2008

Какой веб-сервер не поддерживает POST в этом сценарии? Что делает сопоставимая форма HTML? ПОСТ или ПОЛУЧИТЬ? Просто сделайте то же самое ... Я подозреваю, что WebClient или HttpWebRequest отлично справятся со своей работой.

0 голосов
/ 08 декабря 2008

Не используете фонового работника?

Если вы сделаете это, вы можете установить ApartmentState на то, что вы хотите. Просто не забывайте Invoke / BeginInvoke при отправке данных обратно в любой элемент управления Form.

...