C#webbrowser documentcomplete事件触发两次

C#webbrowser documentcomplete事件触发两次,c#,listbox,automation,webbrowser-control,C#,Listbox,Automation,Webbrowser Control,我正在创建一个c#窗口表单应用程序,用户可以在其中注册到我的网站。该程序旨在简化从桌面多次注册的过程。我有两个活动需要注册 第一项活动: private void textBox5_TextChanged(object sender, EventArgs e) { if (textBox5.Text.Length == 4) { // users to enter captcha in this

我正在创建一个c#窗口表单应用程序,用户可以在其中注册到我的网站。该程序旨在简化从桌面多次注册的过程。我有两个活动需要注册

第一项活动:

 private void textBox5_TextChanged(object sender, EventArgs e)
        {


            if (textBox5.Text.Length == 4)
            {
                // users to enter captcha in this field
                button5.Text = "&Copy " + Convert.ToString( listBox2.Items.Count) + " Id";
                registerPost();              

                textBox5.Clear(); //clear the captcha for loading next captcha

            }

        }
第二项活动:

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            validation();
            captcha();

         }
现在,验证方法包含以下几个逻辑:

    private void validation()
    {
        if (webBrowser2.DocumentTitle.Contains("Referral via Email"))
        {
            HtmlElementCollection classButton = webBrowser2.Document.All;
            foreach (HtmlElement element in classButton)
            {
                if (element.GetAttribute("className") == "cta-join-btn")
                {
                    element.InvokeMember("click");
                }

            }

        }

        else if (webBrowser2.DocumentText.Contains("Security Code does not match."))
        {
            label9.Text = "&Status : Wrong Captcha";
        }
        else if (webBrowser2.DocumentText.Contains("exceeded"))
        {
            label9.Text = "&Status : Exceeded";


            if (listBox1.SelectedIndex < listBox1.Items.Count - 1)
            {
                listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
            }
            webBrowser2.Navigate(textBox4.Text);
        }
        else if (webBrowser2.DocumentText.Contains("Oops, you took too long to fill up this field. A new code has been generated for you."))
        {
            label9.Text = "&Status : Captcha Expired";
        }
        else if (webBrowser2.DocumentText.Contains("Username is taken."))
        {
            label9.Text = "&Status : UserName Exist";
            textBox3.Text = generateRandomID(Convert.ToInt32(textBox6.Text));
        }
        else if (webBrowser2.DocumentText.Contains("The email address you entered is already linked to an existing mig33 account! Please enter a different email address."))
        {
            label9.Text = "&Status : Email Exist";

            if (listBox1.SelectedIndex < listBox1.Items.Count - 1)
            {
                listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
            }
            webBrowser2.Navigate(textBox4.Text);
        }
        else if (webBrowser2.DocumentTitle.Contains("Success")) //problem area 
        {

            writeText();
            label9.Text = "&Status : Success!!!";
            textBox3.Text = generateRandomID(Convert.ToInt32(textBox6.Text));

            if (listBox1.SelectedIndex < listBox1.Items.Count - 1)
            {
                listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
            }
            webBrowser2.Navigate(textBox4.Text);
        }
    }
private void validation()
{
if(webBrowser2.DocumentTitle.Contains(“通过电子邮件转介”))
{
HtmlElementCollection classButton=webBrowser2.Document.All;
foreach(类按钮中的HtmlElement元素)
{
if(element.GetAttribute(“className”)=“cta加入btn”)
{
元素。调用成员(“单击”);
}
}
}
else if(webBrowser2.DocumentText.Contains(“安全代码不匹配”))
{
标签9.Text=“&状态:错误验证码”;
}
else if(webBrowser2.DocumentText.Contains(“超出”))
{
标签9.Text=“&状态:超出”;
如果(listBox1.SelectedIndex
在我的程序中有两个listBox,其中listBox包含在执行每个documentcomplete事件期间创建的ID和密码,第二个listBox包含必须在webbrowser控件中打开的注册链接

除了validation()方法中的条件成功之外,其他一切都很好

当程序被执行并且用户开始注册过程时,如果用户成功地创建了一个ID,listbox项将被触发两次。可能是因为如果用户成功注册,他将被重定向到另一个页面,从而导致documentcomplete事件的复杂性

我在某处错过了一些东西,尝试了很多,任何帮助都将不胜感激。

@sauk, 文档事件在未正确完成时将保持交互式,以便您可以使用

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {  
       // check event state is complete or interactive
        if (webBrowser2.ReadyState != WebBrowserReadyState.Complete)
             return;
            validation();
            captcha();

         }
您的函数(validation()和captcha())将仅在文档完成事件完成时调用。否则它将不会调用您的函数

可能重复的