У меня есть Winform с BackgroundWorker. BackgroundWorker, помимо прочего, должен выполнить HTTP-вызов страницы, заполнить некоторые данные, отправить форму и получить HTML-код, который возвращается после «нажатия» кнопки отправки. При этом я столкнулся с рядом препятствий:
Что мне делать, чтобы решить эту проблему?
[Edit]: точка входа приложения уже помечена атрибутом [STAThread].





Не использовать фоновый воркер?
Если вы это сделаете, вы можете установить для ApartmentState то, что хотите. Просто не забудьте Invoke / BeginInvoke при отправке данных обратно в любые элементы управления формы.
Э-э-э-э? Нет, вам не нужен объект BackgroundWorker для работы в фоновом режиме. Вы можете использовать ThreadPool.QueueUserWorkItem или новый поток (SomeMethod) .Start (). В последнем случае вы можете установить состояние квартиры.
Вы пробовали использовать WebClient.UploadValues с аргументом Method, установленным на "GET"?
Да, я это сделал, и получил «System.Net.ProtocolViolationException: невозможно отправить тело содержимого с этим типом глагола».
Какой веб-сервер не поддерживает POST в этом сценарии? Что делает сопоставимая HTML-форма? POST или GET? Просто сделайте то же самое ... Я подозреваю, что WebClient или HttpWebRequest отлично справятся со своей задачей.
Это внутреннее приложение с двумя текстовыми полями и кнопкой для входа в систему. Сама форма имеет javascript-событие onClick, которое вызывает обратную передачу (вау, это необычно); WebClient выбрасывает, как указано в пункте 2; как один HttpWebRequest с полезной нагрузкой, а не с использованием метода POST?
Я совершенно не понимаю, о чем вы на самом деле спрашиваете. Если вы запускаете фоновый процесс и он терпит неудачу, вы получите сообщение об этом через RunWorkerCompletedEvent. Если вы затем посмотрите на аргументы события, вы сможете определить, был ли процесс успешным или нет (через свойство RunWorkerCompletedEventArgs.Error).
В зависимости от ошибки вы можете перезапустить свой запрос или отобразить ошибку пользователю.
Надеюсь, я не совсем сбился с пути.
Да, но это требование (страница вызова, вход в систему, возврат результата на целевой странице) - лишь крошечная часть того, что на самом деле делает фоновый поток ... Фактически, это одна из примерно 20 различных вещей, которые должны быть выполнены с этим. нить. Я бы использовал другой BackgroundWorker, но у него были бы те же проблемы.
Это как бы противоречит цели использования BackgroundWorker - поток пользовательского интерфейса будет выполнять всю работу.