首页 新闻 会员 周边

WinForm中如何用WebBrowser.Navigate等待加载完了,再循环加载指定的uri啊?

0
悬赏园豆:50 [已解决问题] 解决于 2010-04-15 15:34
代码
public SimulationClick()
{
InitializeComponent();
}
public string[] keywords = { "kw1", "kw2", "kw3", "kw4", "kw5", "kw6", "kw7" };
public bool isLoading = true;
WebBrowser webb
= new WebBrowser();
public string currentKeywords = string.Empty;
private void btn_SimulationClick_Click(object sender, EventArgs e)
{
foreach (string str in keywords)
{
currentKeywords
= str;
isLoading
= true;
this.Invoke(new webbloading(loadingDoc));
while (isLoading)
{
if (this.webb.ReadyState == WebBrowserReadyState.Complete)
{
this.ScreenStatus.Text += "关键词“" +str + "”请求完成!\r\n";
isLoading
= false;
//do something
}
}
}
}
public delegate void webbloading();
public void loadingDoc()
{
webb.Navigate(
"http://www.xxx.com/search.aspx?keywords=" + currentKeywords);
this.ScreenStatus.Text += "关键词“" + currentKeywords + "”正在请求……\r\n";
}

 以上是我的代码,原本是想用this.webb.ReadyState == WebBrowserReadyState.Complete来判断,加载完成,但实际运行时,怎么也无法判断!

我在网上也搜索一些案例,很多人都用Application.DoEvents()来等待本次加载完毕才执行下次循环,因为考虑到效率问题,所以决定不采用Application.DoEvents(),而用多线程来做!现在主要是不知道如何判断webbrowse加载完成。我也尝试过用,webb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentLoad());,在DocumentCompleted事件加委托方法来做,但最后也没有成功,因为总是加载最后一个关键词。

对于此问题,在此请教各位有相关开发经验的大虾们……谢谢了!

Kusion的主页 Kusion | 初学一级 | 园豆:44
提问于:2010-04-15 12:46
< >
分享
最佳答案
0

WebBrowser 的DocumentCompleted 只是表示某个文档下载结束,而HTML 里面有时候要下载多个文档,所以这个东西有时候就不准。另外好像WebBrowser 是不能在多线程中使用的吧,我以前试过,好像不行。

有个下面的控件,你可以试试,比WebBrowser 功能要强

http://www.codeproject.com/KB/miscctrl/csEXWB.aspx

收获园豆:50
eaglet | 专家六级 |园豆:17139 | 2010-04-15 13:40
eaglet ,谢谢你啦!想了老半天,还是自己解决了,解决多线程方法!
Kusion | 园豆:44 (初学一级) | 2010-04-15 15:34

@Kusion: 想问一下,你是怎么解决的呢,给个思路,谢谢你

wslyykl | 园豆:200 (初学一级) | 2013-03-25 11:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册