/// <summary> /// 抓网页数据核心方法 /// </summary> /// <param name="pros"></param> /// <param name="threadName"></param> public void DoIt(List <Parameter> pros, string threadName) { ListBoxHelp.Add(lbRes, $"{DateTime.Now.CnTime()}|thread-{threadName} start..." + "\r\n"); string TempUrl = txtURL.Text.Trim(); for (int i = 0; i < pros.Count; i++) { //接收信号量,否则会阻塞达到暂停的目的 EventHandle.WaitOne(); //http HttpUtility http = new HttpUtility(); StringBuilder sb = new StringBuilder(); StringBuilder sbLog = new StringBuilder(); //获取参数 Parameter para = pros[i]; //计时开始 Stopwatch sw = new Stopwatch(); sw.Start(); sb.AppendFormat("{0}", DateTime.Now.CnTime()); //根据参数重新匹配http url string url = GenerateFullURL(TempUrl, para.Param); //请求http string value = TextHelper.ClearSpace(http.CreateGet(url)); sw.Stop(); sb.AppendFormat("|thread-{0}({1}/{2})serid:{3}|url:{4}", threadName, i + 1, pros.Count, para.Id, url); sb.AppendFormat("|times:{0}s", sw.ElapsedMilliseconds * 1.0 / 1000); sbLog.AppendFormat("serid:{0},{1}", para.Id, value); //TextHelper.ClearHtml(value) ListBoxHelp.Add(lbRes, sb.ToString() + "\r\n"); LogHelper.WriteLog(sbLog.ToString()); //最后一次不sleep了 if (i < pros.Count) { Thread.Sleep(ThreadSleep); } //执行完毕后计数 CalculatedQuantity(); } ListBoxHelp.Add(lbRes, $"{DateTime.Now.CnTime()}|thread-{threadName} finished!" + "\r\n"); }