C# winform 窗体上有三个控件 两个button(button1和button2)和一个webbrowser,我在button1中检测webbroser加载文档是否完毕,如果完毕则点击button2,否则等待 webbrowser1加载完毕,这个逻辑应该怎么表达呢
我目前是这样搞的
在button1_click函数中
webBrowser1.Navigate(s);
while(webBrowser1.ReadyState!=WebBrowserReadyState.Complete)
{
};
btnNextPage_Click(null, null);
结果发现的问题是,函数死循环在while语句
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
button2_Click(button2, null);
}
private void button1_Click(object sender, EventArgs e)
{
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
button2_Click(button2, null);
}
else
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
}
当然会是死循环,因为webbrowser加载有一个过程,你在button1的事件中去检查永远不会完成,因为这时候是还在服务器post当中。你要在客户端判断!就像判断ajax请求状态那样。
webBrowser1.Navigate(s);
while(webBrowser1.ReadyState!=WebBrowserReadyState.Complete)
{
Application.DoEvents();
};
btnNextPage_Click(null, null);
在 while 语句中加上 Application.DoEvents(); 试试~
private void button1_Click(object sender, EventArgs e)
{
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
DoSomeThing();
}
}
private void button2_Click(object sender, EventArgs e)
{
DoSomeThing();
}
private void DoSomeThing()
{
//
}
没办法解决的,使用过Iframe后
建议不要用webbrowser
使用httpRequest来实现也好