C#/ Winform:将数据输入HTML页面,提交表单

时间:2008-12-08 19:51:18

标签: c# multithreading http interop backgroundworker

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

  1. 无法发布数据,因为目标网络服务器不支持该方法。
  2. 再次使用WebClient.UploadValues,因为网络服务器不支持POST。
  3. 无法使用WebBrowser控件,因为BackgroundWorkers吸入COM Interop并抛出一个异常,表示它必须位于STA线程中(单线程公寓)
  4. 无法运行另一个单独的线程,因为BW必须等待结果才能继续(不能,或者至少我不知道这样做不会崩溃的方法)< / LI>
  5. 无法更改线程的ApartmentState,因为它是BackgroundWorker,如果被告知要转到STA模式,它会抛出
  6. 我该怎么做才能解决这个问题?

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

不要使用后台工作人员吗?

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

答案 2 :(得分:0)

在这种情况下,哪种Web服务器不支持POST?可比的HTML表单有什么作用? POST还是GET?只是这样做..我怀疑WebClient或HttpWebRequest将完成这项工作。

答案 3 :(得分:0)

我不确定你真正在问什么。如果您运行后台进程但它失败,则通过RunWorkerCompletedEvent报告。如果您随后查看了eventarguments,您可以判断该进程是否成功(通过RunWorkerCompletedEventArgs.Error属性)。

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

我希望我不会完全离开赛道。