vb.net 多线程获取网页内容
数组SUrl()保存了100个网页的网址,我想通过多线程的方式同时读取这100个网页的内容,保存在数组SResult()中,不考虑带宽问题。求代码,求思路。线程过程中参数...
数组SUrl()保存了100个网页的网址,我想通过多线程的方式同时读取这100个网页的内容,保存在数组SResult()中,不考虑带宽问题。
求代码,求思路。
线程过程中 参数传递、线程计算的返回值 怎么解决?只能使用public变量吗?有没有更有效的方法?
==============================================================
回复: endlesspark ,你的函数主要是用来获取网页文件的吧?难点在于如何给线程过程传递参数,并且获得线程过程的返回值。而且,vb.net源码最好。。。。还是要感谢你,但你的答案不是我想要的。
期待下一个答案。 展开
求代码,求思路。
线程过程中 参数传递、线程计算的返回值 怎么解决?只能使用public变量吗?有没有更有效的方法?
==============================================================
回复: endlesspark ,你的函数主要是用来获取网页文件的吧?难点在于如何给线程过程传递参数,并且获得线程过程的返回值。而且,vb.net源码最好。。。。还是要感谢你,但你的答案不是我想要的。
期待下一个答案。 展开
4个回答
展开全部
public static string getXmlFile(String url, String paramList,string referer)
{
HttpWebResponse res = null;
string strResult = " ";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET ";
req.KeepAlive = true;
req.Referer=referer;
//CookieContainer cookieCon = new CookieContainer();
//req.CookieContainer = cookieCon;
//req.CookieContainer.SetCookies(new Uri(url),cookieheader);
StringBuilder UrlEncoded = new StringBuilder();
res = (HttpWebResponse)req.GetResponse();
Stream ReceiveStream = res.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding( "gb2312 ");
StreamReader sr = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[256];
int count = sr.Read( read, 0, 256 );
while (count > 0)
{
String str = new String(read, 0, count);
strResult += str;
count = sr.Read(read, 0, 256);
}
}
catch(Exception e)
{
strResult = e.ToString();
}
finally
{
if ( res != null )
{
res.Close();
}
}
return strResult;
}
多线程里调用就行了 费了好长时间才弄出来 我调试过了 能行 如果对你有用就给分吧
{
HttpWebResponse res = null;
string strResult = " ";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET ";
req.KeepAlive = true;
req.Referer=referer;
//CookieContainer cookieCon = new CookieContainer();
//req.CookieContainer = cookieCon;
//req.CookieContainer.SetCookies(new Uri(url),cookieheader);
StringBuilder UrlEncoded = new StringBuilder();
res = (HttpWebResponse)req.GetResponse();
Stream ReceiveStream = res.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding( "gb2312 ");
StreamReader sr = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[256];
int count = sr.Read( read, 0, 256 );
while (count > 0)
{
String str = new String(read, 0, count);
strResult += str;
count = sr.Read(read, 0, 256);
}
}
catch(Exception e)
{
strResult = e.ToString();
}
finally
{
if ( res != null )
{
res.Close();
}
}
return strResult;
}
多线程里调用就行了 费了好长时间才弄出来 我调试过了 能行 如果对你有用就给分吧
展开全部
1、建立100个线程,给这些线程的pubic变量i 赋值0~99,则线程在SUrl(i)中取地址,往SResult(i)中存结果。
2、循环sleep(100); 和检测结果是否全部得到,如果全部得到则返回程序。
或
2、每个线程完成后向程序发送完成消息,其中表明自己的i 值。消息处理函数如果发现有线程没完成则退出,如果都完成了则继续进行下面的工作。(当然,这样就不是在一个函数里完成全部功能了)
2、循环sleep(100); 和检测结果是否全部得到,如果全部得到则返回程序。
或
2、每个线程完成后向程序发送完成消息,其中表明自己的i 值。消息处理函数如果发现有线程没完成则退出,如果都完成了则继续进行下面的工作。(当然,这样就不是在一个函数里完成全部功能了)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相关代码如下:
1、相关代码如下:
Public Function getHtmlStr(strUrl As String) '获取远程网页源码
On Error Resume Next
Dim XmlHttp As Object, stime, ntime
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.open "GET", strUrl, True
XmlHttp.send
stime = Now '获取当前时间
While XmlHttp.ReadyState <> 4
DoEvents
ntime = Now '获取循环时间
If DateDiff("s", stime, ntime) > 3 Then getHtmlStr = "": Exit Function
Wend
getHtmlStr = StrConv(XmlHttp.responseBody, vbUnicode)
Set XmlHttp = Nothing
End Function
2、代码使用:在窗体代码相应位置写如下代码
dim a as string
a=getHtmlStr("要获取的网站网址url")
上面a取得的值就是我们要的结果。
1、相关代码如下:
Public Function getHtmlStr(strUrl As String) '获取远程网页源码
On Error Resume Next
Dim XmlHttp As Object, stime, ntime
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.open "GET", strUrl, True
XmlHttp.send
stime = Now '获取当前时间
While XmlHttp.ReadyState <> 4
DoEvents
ntime = Now '获取循环时间
If DateDiff("s", stime, ntime) > 3 Then getHtmlStr = "": Exit Function
Wend
getHtmlStr = StrConv(XmlHttp.responseBody, vbUnicode)
Set XmlHttp = Nothing
End Function
2、代码使用:在窗体代码相应位置写如下代码
dim a as string
a=getHtmlStr("要获取的网站网址url")
上面a取得的值就是我们要的结果。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
补充一楼,1.传递参数可以用数组赋值保存在内存中,2.多线程我也不太会,3.你可以封装成类啊,把方向抽象出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |