2

我有一个带有 BackgroundWorker 的 Winform。BackgroundWorker,除其他外,必须对页面进行 HTTP 调用,填写一些数据,提交表单,并检索“单击”提交按钮后返回的 HTML。在执行此操作时,我遇到了许多障碍:

  1. 无法发布数据,因为目标网络服务器不 405 支持该方法。
  2. 再次不能使用 WebClient.UploadValues,因为网络服务器不支持 POST。
  3. 无法使用 WebBrowser 控件,因为 BackgroundWorkers 在 COM 互操作方面很糟糕,并且引发了一个异常,表明它必须在 STA 线程中(单线程单元)
  4. 无法运行另一个单独的线程,因为 BW 必须坐下来等待结果才能继续(不能,或者至少我不知道一种不会崩溃的方法)
  5. 无法更改线程的 ApartmentState,因为它是 BackgroundWorker,如果被告知进入 STA 模式,它会抛出

我应该怎么做才能解决这个问题?

[编辑]:应用入口点已经用 [STAThread] 属性标记。

4

4 回答 4

2

您是否尝试过使用WebClient.UploadValues并将 Method 参数设置为 "GET" ?

于 2008-12-08T20:02:45.220 回答
0

不要使用后台工作人员?

如果你这样做,你可以将 ApartmentState 设置为你想要的。只需记住在将数据推回任何表单控件时调用/BeginInvoke。

于 2008-12-08T19:58:57.227 回答
0

在这种情况下不支持 POST 的网络服务器是什么?可比较的 HTML 表单有什么作用?POST 还是 GET?做同样的事情。我怀疑 WebClient 或 HttpWebRequest 会做得很好。

于 2008-12-08T20:03:42.397 回答
0

我很不确定你到底在问什么。如果你运行一个后台进程并且它失败了,你会通过 RunWorkerCompletedEvent 得到这个报告。如果您然后查看事件参数,您可以判断该过程是否成功(通过 RunWorkerCompletedEventArgs.Error 属性)。

根据错误,您可以重新启动您的请求或向用户显示错误。

我希望我没有完全偏离轨道。

于 2008-12-08T20:03:58.573 回答