从服务器C#获取响应

时间:2018-01-28 04:07:27

标签: c# forms webbrowser-control

我尝试将c#从使用c#提交到网站,并尝试在发送数据后从服务器获取响应作为消息框。该网站会重定向到另一个页面以显示输出。

到目前为止发生的情况是,直到我在显示数据的消息框上单击“确定”之后才会提交数据。

                WebBrowser browser = new WebBrowser();
                string target = "http://www.awebsite.com";

                browser.Navigate(target);
                browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(XYZ);

            }
        }
        private void XYZ(object sender, WebBrowserDocumentCompletedEventArgs e) // fail was here.

        {

            WebBrowser b = (WebBrowser)sender;
            string text = richTextBox1.Text.ToString();
            if (text == null)
            {
                MessageBox.Show("the messgae was empty");
                    }

            b.Document.GetElementById("idmsg").InnerText = richTextBox1.Text.ToUpper().ToString();
            b.Document.GetElementById("idpassw").InnerText = ".....";
            b.Document.GetElementById("idpagers").InnerText = id;
            b.Document.GetElementById("Send").InvokeMember("click");
            // allow server response time
            System.Threading.Thread.Sleep(5000);
            string output = b.Document.Body.OuterText.ToString();
            MessageBox.Show(output);
         }

我还尝试添加另一个Document complete with the //allow server response time code,但又一次发送,直到OK被按下。

我做错了什么?

1 个答案:

答案 0 :(得分:-2)

你完全错了。永远不要依赖.Sleep(...)。 C#提供了足够丰富的异步环境,即Task DoAsync(...),有点像await DoAsync()。这保证除非异步操作成功完成,否则不会执行低于DoAsync()的代码,否则会因错误而失败。因此,当您到达最后MessageBox.Show(...)时,所有数据都将存在,并按预期正确显示。