最近做模拟论坛发贴遇到比较多的问题,现在基本的登陆和退出没问题,在流程上是通的,目前如果不取消webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler事件的话,程序会不停的登陆,退出循环工作,对C#不是很熟悉,请大侠们解释一下相关的原理,为什么会出现这样的问题,如果有代码最好了,我试了添加几个地方卸载代码,都不成功,请大家帮帮忙。using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace 测试平台
{
      public partial class Form1 : Form
      {
            public Form1()
            {
                  InitializeComponent();
            }            private void Form1_Load(object sender, EventArgs e)
            {
                this.webBrowser1.Navigate("http://www.discuz.net/");
                System.Threading.Thread.Sleep(2000);
                webBrowser1.ScriptErrorsSuppressed = true;
            }            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                  ChackIn();
                  
            }
            public void LogIn()
            {
                 
                  HtmlElementCollection doc = webBrowser1.Document.All;
                  if (doc != null)
                  {
                        foreach (HtmlElement item in doc)
                        {
                              if (item.Name == "username")
                              {
                                    item.InnerText = "用户名";
                              }
                              if (item.Name == "password")
                              {
                                    item.SetAttribute("value", "密码");
                              }
                              if (item.GetAttribute("className").Equals("pn vm") && item.GetAttribute("type").Equals("submit"))
                              {
                                    item.InvokeMember("click");
                              }
                        }
                       // webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
                  }
            }
            public void LogOut()
            {
                  System.Threading.Thread.SpinWait(5000);
                  HtmlElementCollection logout = webBrowser1.Document.All;
                  foreach (HtmlElement item in logout)
                  {
                        if(item.TagName.ToLower().Equals("a"))
                        {
                              if(item.OuterHtml.IndexOf("http://www.discuz.net/member.php?mod=logging&amp")>0)
                              {
                                    item.InvokeMember("click");
                              }
                        }
                  }
{
}
            }
            public void ChackIn()
            {
                  if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                  {
                       HtmlElement item = webBrowser1.Document.Body;
                      
                        if (item.OuterText.IndexOf("退出")>0)
                        {
                              LogOut();
                              LogIn();
                      }
                        else
                        { 
                             LogIn();
                        }
                  }
            
            }      }
}

解决方案 »

  1.   


              //表示你是否已登录
              private bool login = false;
              public void ChackIn()
                {
                      if(this.login) return;                  if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                      {
                           HtmlElement item = webBrowser1.Document.Body;
                          
                            if (item.OuterText.IndexOf("退出")>0)
                            {
                                  LogOut();
                                  LogIn();
                          }
                            else
                            { 
                                 LogIn();
                            }
                           this.login=true;
                      }
                     
                }