private void btn_start_Click(object sender, EventArgs e) { try { if ("".Equals(tb_searchKey.Text.Trim())) { XtraMessageBox.Show("请输入搜索引擎检索关键字!"); return; } btn_start.Enabled = false; if (workItemsGroup == null) { workItemsGroup = ThreadPoolEx.getWorkItemsGroup(5); workItemsGroup.OnIdle += new WorkItemsGroupIdleHandler(delegate(IWorkItemsGroup target) { foreach (String url in engineList[0].AllUrlMap.Values) { parseService.add(url, Main.type); } XtraMessageBox.Show("搜索引擎共抓取出" + engineList[0].AllUrlMap.Count + "个站点提交分析"); engineList[0].AllUrlMap.Clear(); this.Close(); }); } foreach (EngineEntity engine in engineList) { if (engine.Selected && "未处理".Equals(engine.Status)) { Hashtable param = new Hashtable(); param.Add("engine", engine); param.Add("searchKey", tb_searchKey.Text.Trim()); engine.Status = "等待处理"; ThreadPoolEx.add(workItemsGroup, new WorkItemCallback(EngineService.search), param, WorkItemPriority.Normal); } } } catch { } finally { btn_start.Enabled = true; } }
public void add(String url, String type) { url = url.Replace("\r\n", "").Replace(Environment.NewLine, "").Trim(); RuntimeEntity runtime = runtimeService.get(url); if (runtime == null) { runtime = runtimeService.add(url); } if (Constant.RunStatus.RUNING.Equals(runtime.RunStatus)) { try { if (get(url) == null) { runtime.WaitQueue.Add(url, new ParseEntity(url, type)); Hashtable param = new Hashtable(); param.Add("url", url); param.Add("type", type); lock (runtime.WorkItemsGroup) { ThreadPoolEx.add(runtime.WorkItemsGroup, new WorkItemCallback(ParseThread.run), param, runtime.Priority); } } } catch { } //等待解析数超过系统设定,则优先级降低 if (!WorkItemPriority.Lowest.Equals(runtime.Priority) && (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count) > Convert.ToInt32(ConfigService.get("parse.lowParseCnt"))) { runtime.Priority = WorkItemPriority.Lowest; } //已解析数超过系统设定,则停止 if (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count + runtime.ErrorQueue.Count >= Convert.ToInt32(ConfigService.get("parse.rule.maxParseCnt"))) { runtime.RunStatus = Constant.RunStatus.STOPING; } } }