张贴webBrowser1_DocumentCompleted保持循环
本文关键字:循环 DocumentCompleted webBrowser1 张贴 | 更新日期: 2023-09-27 18:17:01
我写了一些代码来发布消息到一个网站。它工作得很好(对于第一个实例),问题是,一旦它在webBrowser1_DocumentCompleted方法中,它就会不断循环(一遍又一遍地运行SendData方法)。所以我肯定没有处理好这件事。在它运行一次SendData调用之后,我希望它返回到它最初开始的button1_Start_Click事件。
private void button1_Start_Click(object sender, EventArgs e)
{
GetData();
}
private void GetData()
{
webBrowser1.Navigate(inputURLID);
}
private void SendData()
{
webBrowser1.Document.GetElementById("subject").SetAttribute("value", textBox2_Subject.Text);//To (username)
webBrowser1.Document.GetElementById("message").SetAttribute("value", richTextBox1.Text);//Subject
webBrowser1.Document.GetElementById("Submit").InvokeMember("click");//Message
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
SendData();
}
我必须张贴,你选择的答案会让你陷入大麻烦。解决方法很简单,您只需要一个变量来告诉您下一个DocumentCompleted事件是您感兴趣的事件。这样的:
private bool WaitingForData;
private void GetData()
{
webBrowser1.Navigate(inputURLID);
WaitingForData = true;
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (WaitingForData) SendData();
WaitingForData = false;
}
问题是,当你点击Submit时,会加载一个新页面,并为这个新页面再次调用DocumentCompleted。
你可以尝试这样做:
bool documentCompleted = false;
private void button1_Start_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(inputURLID);
WaitForDocumentCompleted();
SendData();
WaitForDocumentCompleted();
}
private void WaitForDocumentCompleted()
{
while (!documentCompleted)
{
Thread.Sleep(100);
Application.DoEvents();
}
documentCompleted = false;
}
private void SendData()
{
webBrowser1.Document.GetElementById("subject").SetAttribute("value", textBox2_Subject.Text);//To (username)
webBrowser1.Document.GetElementById("message").SetAttribute("value", richTextBox1.Text);//Subject
webBrowser1.Document.GetElementById("Submit").InvokeMember("click");//Message
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
documentCompleted = true;
}