110,534
社区成员
发帖
与我相关
我的任务
分享
//采集的主线程代码
#region 下载所有链接
private string ReadUrl()
{
//读取待采集地址
string url = null;
for (int i = 0; i < lst.Items.Count; i++)
{
if (lst.Items[i].SubItems[3].Text == "等待")
{
url = lst.Items[i].SubItems[2].Text;
return url;
}
}
return url;
}
/// <summary>
/// 开始下载所有链接
/// </summary>
private void GetLinks()
{
string url = ReadUrl();
//读取URL,如果多次没有URL,则停止线程的运行
if (url == null)
{
NoHref++;
if (NoHref > ThreadNumber * 4)
Thread.CurrentThread.Abort();
Thread.Sleep(1000);
GetLinks();
}
//更新UI,和更改下载状态
lst.Invoke(new WeiTuo(UpdateDowningStatus), new object[] { url, Thread.CurrentThread.Name, "下载中…" });
string content = CaiJi.GetWebPage(url, Ecd);
FileLength += content.Length;
DownedUrls = array.ArrayAddItem(DownedUrls, url);
if (content.Length == 0)//如果返回内容为空,则递归
{
lst.Invoke(new WeiTuoError(DownError), new object[] { url, content });
GetLinks();
}
if (content.IndexOf("Error:") != -1)
{
if (content.IndexOf("远程服务器") > 0)
content = "404";
else
content = "TimeOut";
lst.Invoke(new WeiTuoError(DownError), new object[] { url, content });
GetLinks();
}
lst.Invoke(new WeiTuo(UpdateDowningStatus), new object[] { url, Thread.CurrentThread.Name, "完成" });
ViewItemsAdd(content, url);
Thread.Sleep(0);
GetLinks();
}
#endregion
//用于采集的程序