如何在函数中直接等待网页下载完毕后,再进行下步处理?

aloneone 2008-12-21 08:57:05
当前使用的WebBrowser.Navigate(Url)加载网页,其所在过程无须等待网页加载完毕就会继续处理下一条语句.若要待网页下载完结后再就必须在WebBrowser.DocumentComplete事件中写代码.
可是当在循环中依次下载系列网页并依次处理这些网页,就无法方便地通过WebBrowser.DocumentComplete事件实现.

希望实现的功能由下面的伪代码表求:
void a ()
{
String strUrl=""
for (int i=0; i<=UrlList.Count; i++)
{
strUrl = UrlList[i];
DownLoad(strUrl);
GetSomeElemtFrom(Webof_strUrl);
}
}

请高手就DownLoad(strUrl)给出具体的实现代码,以保证网页加载完结后再执行GetSomeElemtFrom(WebOf_strUrl)
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xskj0525 2008-12-22
  • 打赏
  • 举报
回复
其实还是用 WebBrowser.DocumentComplete 这个啊

简单的 加个全局变量 bool webB_Ok 在你要下载东西前 webB_Ok = False 当下载完之后 webB_Ok = True 就行了

DownLoad(strUrl);
while (!webB_Ok)
{
Application.DoEvents();
}
GetSomeElemtFrom(Webof_strUrl);

这个貌似是个简单的方法哦 呵呵!
cuike519 2008-12-22
  • 打赏
  • 举报
回复
WebBrowser没用过,在js里面可以使用XMLHttpRequest利用其onreadystatechange检查其状态(status)来判断是否完成加载。

你可以考虑使用类似的方法实现。。。
aloneone 2008-12-22
  • 打赏
  • 举报
回复
我找到了方法,与大家共享
////rtBox_Web 是RichTextBox控件,用于收集取得的网页代码
////rtBox_Web.Lines.ToString()就是得到的所有HTML代码
void a ()
{
String strUrl=""
for (int i=0; i <=UrlList.Count; i++)
{
strUrl = UrlList[i];
DownLoad(strUrl);
GetSomeElemtFrom(rtBox_Web.Lines.ToString());
}
}

void DownLoad(strUrl)
{


WebClient myClient = new WebClient();
//从指定网址得到返回的HTML代码放入流中
Stream response;
response = myClient.OpenRead(strUrl);

Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

StreamReader readStream = new StreamReader(response, encode);
//通过读取流将得到的HTML代码收集到一个RichTextBox的控件中,并显示出来.
while (!readStream.EndOfStream)
{
rtBox_Web.AppendText(readStream.ReadLine());
}

readStream.Close();
response.Close();
}

////网页代码已全部取得,而且是等取完网页代码后才顺序执行下条语句!!!!
////现在的问题是,有什么如办法,能够象HtmlDocument一样方便地找到我需要的HtmlElement
aloneone 2008-12-22
  • 打赏
  • 举报
回复
我试过这种方式,好象会引起死循环.
[Quote=引用 6 楼 xskj0525 的回复:]
C# code
void a()
{
String strUrl = "";
for (int i = 0; i <= UrlList.Count; i++)
{
web_OK = false;
strUrl = UrlList[i];
DownLoad(strUrl);
while (!web_OK)
{
Application.DoEvents();
}
GetSomeElemtFrom(Web…
[/Quote]
aloneone 2008-12-22
  • 打赏
  • 举报
回复
我试过这种方式,好象会引起死循环.
[Quote=引用 6 楼 xskj0525 的回复:]
C# code
void a()
{
String strUrl = "";
for (int i = 0; i <= UrlList.Count; i++)
{
web_OK = false;
strUrl = UrlList[i];
DownLoad(strUrl);
while (!web_OK)
{
Application.DoEvents();
}
GetSomeElemtFrom(Web…
[/Quote]
xskj0525 2008-12-22
  • 打赏
  • 举报
回复

void a()
{
String strUrl = "";
for (int i = 0; i <= UrlList.Count; i++)
{
web_OK = false;
strUrl = UrlList[i];
DownLoad(strUrl);
while (!web_OK)
{
Application.DoEvents();
}
GetSomeElemtFrom(Webof_strUrl);
}
}

private void webB_work_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webB_Ok = true;
}
aloneone 2008-12-21
  • 打赏
  • 举报
回复
唉,不要很具体的代码,有几个关键的就行了
1)连上网页
2)取得网页的HTML

这两项工作都必须是完成之后才能继续下面的代码.
heyu1000 2008-12-21
  • 打赏
  • 举报
回复
不想写代码,帮顶一下
aloneone 2008-12-21
  • 打赏
  • 举报
回复
求教中,推荐位C#高手也行呀

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧