2014-04-02 3 views
0

Я создаю приложение формы окна C#, где пользователь может зарегистрироваться на моем сайте. Программа предназначена для облегчения процесса множественной регистрации с рабочего стола. У меня есть 2 события для регистрации.C# webbrowser documentcomplete событие стреляет дважды

Первое событие:

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); 
     } 
    } 

В моей программе есть два ListBox, где listBox содержит отображает идентификаторы и пароль, которые создаются во время выполнения каждого документа. vent и второй список содержат ссылки регистрации, которые должны быть открыты в элементе управления webbrowser.

Все прекрасно работает, кроме случаев условного успеха в методе validation().

Когда программа выполнена и пользователь начинает процесс регистрации, и если пользователь успешно создает идентификатор, элементы списка будут запущены дважды. возможно, потому что, если пользователь успешно зарегистрирован, он перенаправляется на другую страницу, что вызывает осложнение для документа, заполняющего событие.

Я чего-то не хватает, много пробовал, Любая помощь будет высоко оценена.

+0

Возможный дубликат [DocumentCompleted firing несколько раз - принятый ответ StackOverflow не работает] (http://stackoverflow.com/questions/18321872/documentcompleted-firing-multiple-times-accepted-stackoverflow- ответ-не-работа) – Noseratio

ответ

0

@ сауков, событие Документ будет оставаться интерактивным, когда оно не будет завершено должным образом, так что вы можете использовать

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

     } 

свои функции (проверка() и CAPTCHA,()) будет вызывать только тогда, когда документ полное событие завершается , в противном случае он не будет вызывать ваши функции

Смежные вопросы