0

メッセージをサイトに投稿するためのコードをいくつか書きました。問題は、webBrowser1_DocumentCompleted メソッドに入るとループし続ける (SendData メソッドを何度も実行する) ことです。したがって、イベントを正しく処理していない必要があります。SendData 呼び出しを 1 回実行した後、最初に開始した 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 に答える