/// <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); }