0

我已经编写了一些代码来将消息发布到站点。它工作得很好(对于第一个实例),问题是一旦它在 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();
    }
4

2 回答 2

0

问题是,当您单击提交时,会加载一个新页面,并为此新页面再次调用 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;
}
于 2013-06-06T02:30:48.740 回答
0

我将不得不发布,您选择的答案会让您陷入困境。解决方法很简单,您只需要一个变量来告诉您下一个 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;
}
于 2013-06-06T11:05:31.857 回答