我尝试将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被按下。
我做错了什么?
答案 0 :(得分:-2)
你完全错了。永远不要依赖.Sleep(...)
。 C#提供了足够丰富的异步环境,即Task DoAsync(...)
,有点像await DoAsync()
。这保证除非异步操作成功完成,否则不会执行低于DoAsync()
的代码,否则会因错误而失败。因此,当您到达最后MessageBox.Show(...)
时,所有数据都将存在,并按预期正确显示。