首页 新闻 搜索 专区 学院

winform 帮我看看这代码,为什么要点两次才能登录。奇怪的问题。

0
悬赏园豆:50 [已关闭问题] 关闭于 2009-12-21 17:36

这是一个客户端软件登录器登录网站的。代码如下

private void btnLogin_Click(object sender, EventArgs e)
{
string error = string.Empty;
string userName = txtUserName.Text.Trim();
string password = txtPassWord.Text.Trim();
if (userName.Length == 0)
{
error
= "请输入用户名";
txtUserName.Focus();
}
else
{
if (password.Length == 0)
{
error
= "请输入密码";
txtPassWord.Focus();
}
else
{
webBrowser.Document.GetElementById(
"username").InnerText = userName;
webBrowser.Document.GetElementById(
"password").InnerText = password;
HtmlElement formLogin
= webBrowser.Document.Forms["formLogin"];
formLogin.InvokeMember(
"submit");
while (webBrowser.Document == null)
{
System.Threading.Thread.Sleep(
5000);
}
string returnString = webBrowser.Document.GetElementById("hidIsLogin").GetAttribute("value");
if (returnString.ToLower() != "true")
{
error
= "账号密码错误";
txtUserName.Focus();
}
else
{
webBrowser.Document.GetElementsByTagName(
"a")[0].InvokeMember("click");
this.Close();
}
}
}
labAlert.Text
= error;
}

 

这是登录按钮事件,为什么要点二点才对登录网站,第一次点击error为账号密码错误.

 

问题补充: 我发现原因了,但不知怎么解决。当我用正确的密码用户名点登录事件时,当执行到string returnString = webBrowser.Document.GetElementById("hidIsLogin").GetAttribute("value");这语句时,hidIsLogin控件的值还是false;当执行完这个事件时才hidIsLogin控件值才变true,我以为webBrowser控件反应慢就开放阻塞线程5秒 //while (webBrowser.Document == null) //{ System.Threading.Thread.Sleep(5000); //} 但还是解决不了问题.. while (true) { if (webBrowser.ReadyState == WebBrowserReadyState.Complete) { break; } } 加这个也不行
阿松的主页 阿松 | 小虾三级 | 园豆:601
提问于:2009-12-10 14:01
< >
分享
所有回答(2)
0
string returnString = webBrowser.Document.GetElementById("hidIsLogin").GetAttribute("value");
是不是第一次的时候
hidIsLogin这个没有值呢,跟踪一下吧。
清海扬波 | 园豆:775 (小虾三级) | 2009-12-10 14:46
0

看到另一个问如何让winform给webform传dataset的问题,看来这位和那位差不多,先去了解http吧

他山之石_ | 园豆:325 (菜鸟二级) | 2009-12-10 15:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册