public void NewTask(string fullClassName, SpiderSettings settings, SpiderCallback callback) { Type tp = assembly.GetType(fullClassName); Spider spider = (Spider)Activator.CreateInstance(tp); spider.NewTask(settings, callback); }
public void NewTask(SpiderSettings settings, SpiderCallback callback) { DateTime beforWorkDt = DateTime.Now; this.spiderCallback = callback; // 开始任务工作 try { ImportSettings(settings); // 导入配置 BeginWork(); } catch (ThreadAbortException) { // 进程正在被中止 // 不进行操作 } catch (Exception e) { // 任务执行中抛出的错误被接住了... LogError(e.Message); Logging.Error(e.ToString()); // 保存错误详情 } // 任务执行完毕 DateTime afterWorkDt = DateTime.Now; double timeSpent = afterWorkDt.Subtract(beforWorkDt).TotalSeconds; Log("\n"); Log($">> 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)"); RunJs($"Task.get('{settings.TaskId}').taskIsEnd();"); // 报告JS任务结束 Utils.ReleaseMemory(true); }
/// <summary> /// 开始执行任务 /// </summary> /// <param name="obj"></param> public void StartTask(object obj) { SpiderSettings settings = (SpiderSettings)obj; settings.CrBrowser = crBrowser; Spider spider = null; // 实例化 Spider 对象 string typeName = $"{this.GetType().Namespace}.Spiders.{settings.ClassName}"; try { spider = (Spider)Activator.CreateInstance(Type.GetType(typeName)); spider.importSettings(settings); // 导入配置 } catch { string errorText = "任务新建失败,无法实例化对象 " + typeName; Logging.Error(errorText); MessageBox.Show(errorText, "Nacollector 错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 开始任务工作 DateTime beforWorkDt = DateTime.Now; try { spider.BeginWork(); } catch (Exception e) { // 任务执行中抛出的错误被接住了... spider.LogError(e.Message); Logging.Error(e.ToString()); // 保存错误详情 #if DEBUG spider.Log(e.ToString()); #endif } // 任务执行完毕 DateTime afterWorkDt = DateTime.Now; double timeSpent = afterWorkDt.Subtract(beforWorkDt).TotalSeconds; spider.Log("\n"); spider.Log($">> 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)"); // 报告JS任务结束 crBrowser.RunJS($"Task.get('{settings.TaskId}').taskIsEnd();"); Utils.ReleaseMemory(true); }
public void NewTaskThread(SpiderSettings settings) { // 创建任务执行线程 var thread = new Thread(new ParameterizedThreadStart(StartTask)) { IsBackground = true }; thread.Start(settings); // 加入 Threads Dictionary taskThreads.Add(settings.TaskId, thread); }
// 创建新任务 public void createTask(string taskId, string className, string classLabel, string parmsJsonStr) { // 配置 var settings = new SpiderSettings { TaskId = taskId, ClassName = className, ClassLabel = classLabel, ParmsJsonStr = parmsJsonStr }; _form.taskRunner.NewTaskThread(settings); }
/// <summary> /// 1.设置配置 /// </summary> /// <param name="spiderSettings"></param> public void importSettings(SpiderSettings spiderSettings) { this.spiderSettings = spiderSettings; TaskId = spiderSettings.TaskId; JArray ja = (JArray)JsonConvert.DeserializeObject(spiderSettings.ParmsJsonStr); foreach (JObject item in ja) { string parmName = item["name"].ToString(); string parmValue = item["value"].ToString(); parms[parmName] = parmValue; } }
// 创建新任务 public void createTask(string taskId, string className, string classLabel, string parmsJsonStr) { // 配置 var settings = new SpiderSettings() { TaskId = taskId, ClassName = className, ClassLabel = classLabel, ParmsJsonStr = parmsJsonStr }; // 创建任务执行线程 var thread = new Thread(new ParameterizedThreadStart(_mainForm.StartTask)); thread.IsBackground = true; thread.Start(settings); // 加入 Threads Dictionary taskThreads.Add(taskId, thread); }
public void NewTask(SpiderSettings settings) { DateTime beforWorkDt = DateTime.Now; string typeName = $"{this.GetType().Namespace}.{settings.ClassName}"; // 实例化 Spider 对象 var spider = (Spider)Activator.CreateInstance(Type.GetType(typeName)); spider.importSettings(settings); // 开始任务工作 try { spider.BeginWork(); } catch (ThreadAbortException) { // 进程正在被中止 // 不进行操作 } catch (Exception e) { // 任务执行中抛出的错误被接住了... spider.LogError(e.Message); Logging.Error(e.ToString()); // 保存错误详情 } // 任务执行完毕 DateTime afterWorkDt = DateTime.Now; double timeSpent = afterWorkDt.Subtract(beforWorkDt).TotalSeconds; spider.Log("\n"); spider.Log($">> 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)"); settings.BrowserJsRunFunc($"Task.get('{settings.TaskId}').taskIsEnd();"); // 报告JS任务结束 Utils.ReleaseMemory(true); }
/// <summary> /// 1.设置配置 /// </summary> /// <param name="spiderSettings"></param> public void ImportSettings(SpiderSettings spiderSettings) { this.spiderSettings = spiderSettings; TaskId = spiderSettings.TaskId; JArray ja = (JArray)JsonConvert.DeserializeObject(spiderSettings.ParmsJsonStr); foreach (JObject item in ja) { string parmName = item["name"].ToString(); string parmValue = item["value"].ToString(); parms[parmName] = parmValue; // 将配置赋值到同名字段 var fields = this.GetType().GetRuntimeFields().Where((t) => t.Name == parmName).ToArray(); if (fields.Length > 0) { var field = fields[0]; if (field.FieldType.Equals(typeof(int))) { int parmValueNnum; if (int.TryParse(parmValue, out parmValueNnum)) { field.SetValue(this, parmValueNnum); } else { throw new Exception("输入的数据无法转换为字段的 int 类型"); } } else { field.SetValue(this, parmValue); } } } }