Esempio n. 1
0
        /// <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($"&gt;&gt; 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)");

            // 报告JS任务结束
            crBrowser.RunJS($"Task.get('{settings.TaskId}').taskIsEnd();");

            Utils.ReleaseMemory(true);
        }