2

BackgroundWorker を持つ Winform があります。BackgroundWorker は、とりわけ、ページに対して HTTP 呼び出しを行い、データを入力し、フォームを送信し、送信ボタンを「クリック」した後に返される HTML を取得する必要があります。これを行っている間、私は多くの障害に遭遇しました:

  1. ターゲット Web サーバーがそのメソッドを 405 サポートしていないため、データを POST できません。
  2. Web サーバーが POST をサポートしていないため、WebClient.UploadValues も使用できません。
  3. BackgroundWorkers が COM 相互運用性を損ない、STA スレッド (シングルスレッド アパートメント) にある必要があるという例外がスローされるため、WebBrowser コントロールを使用できません。
  4. BW は続行する前に座って結果を待つ必要があるため、別の個別のスレッドを実行できません (実行できないか、少なくともクラッシュしない方法を知りません)。
  5. スレッドは BackgroundWorker であるため、スレッドの ApartmentState を変更できず、STA モードに移行するように指示された場合にスローされます

これを解決するにはどうすればよいですか?

[編集]: アプリのエントリポイントは、[STAThread] 属性で既にタグ付けされています。

4

4 に答える 4

2

Method 引数を "GET" に設定してWebClient.UploadValuesを使用してみましたか?

于 2008-12-08T20:02:45.220 に答える
0

バックグラウンド ワーカーを使用しませんか?

これを行うと、ApartmentState を必要なものに設定できます。フォーム コントロールにデータをプッシュするときは、Invoke/BeginInvoke を忘れないでください。

于 2008-12-08T19:58:57.227 に答える
0

このシナリオで POST をサポートしていない Web サーバーはどれですか? 同等の HTML フォームは何をしますか? POSTまたはGET?同じことをしてください.. WebClient または HttpWebRequest がうまくいくと思います。

于 2008-12-08T20:03:42.397 に答える
0

あなたが本当に何について尋ねているのか、私にはよくわかりません。バックグラウンド プロセスを実行して失敗した場合は、RunWorkerCompletedEvent を介して報告されます。その後、eventarguments を見ると、プロセスが成功したかどうかを確認できます (RunWorkerCompletedEventArgs.Error プロパティを介して)。

エラーに応じて、リクエストを再起動するか、ユーザーにエラーを表示できます。

私が完全に軌道から外れていないことを願っています。

于 2008-12-08T20:03:58.573 に答える