最近做模拟论坛发贴遇到比较多的问题,现在基本的登陆和退出没问题,在流程上是通的,目前如果不取消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&")>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();
}
}
} }
}
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&")>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();
}
}
} }
}
//表示你是否已登录
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;
}
}