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事件加委托方法来做,但最后也没有成功,因为总是加载最后一个关键词。
对于此问题,在此请教各位有相关开发经验的大虾们……谢谢了!
WebBrowser 的DocumentCompleted 只是表示某个文档下载结束,而HTML 里面有时候要下载多个文档,所以这个东西有时候就不准。另外好像WebBrowser 是不能在多线程中使用的吧,我以前试过,好像不行。
有个下面的控件,你可以试试,比WebBrowser 功能要强
http://www.codeproject.com/KB/miscctrl/csEXWB.aspx
@Kusion: 想问一下,你是怎么解决的呢,给个思路,谢谢你