/// <summary> /// 开始工作 /// </summary> /// <param name="paraRunType">被调度方式</param> public virtual void DoWork(RunTaskType paraRunType) { #region 记录到日志中 string log = _WrkTask.Task.TaskEntity.Name + " Start Working."; LogType logtype = LogType.TaskRunStart; switch (paraRunType) { case RunTaskType.TaskListInTime: logtype = LogType.TaskRunStart; break; case RunTaskType.ImmediateNoDisturb: logtype = LogType.TaskRunStart_Immediate; break; //case RunTaskType.ImmediateDisturb: // logtype = LogType.TaskRunStart_Immediate_Interupt; // break; } _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, log, logtype); #endregion #region 更新下一步工作 if (paraRunType != RunTaskType.ImmediateNoDisturb) { _WrkTask.Notify_WorkStarted(); } #endregion }
/// <summary> /// 开始工作 /// </summary> /// <param name="paraRunType">被调度方式</param> public override void DoWork(RunTaskType paraRunType) { try { Console.WriteLine("************************** Work Start {0} {1}", _WrkTask.Task.TaskEntity.Name, DateTime.Now); base.DoWork(paraRunType); #region 开始工作 string destFile = Utility.AssemblyHelper.GetAssemblyPath() + _WrkTask.Task.TaskAssembly.AppFile; if (File.Exists(destFile)) { FileInfo fi = new FileInfo(destFile); try { _Process = Process.Start(fi.FullName, _WrkTask.Task.TaskEntity.ExtraParaStr); } catch //捕获执行异常问题 { string s = "无法执行目标对象,执行目标对象出现异常:" + fi.FullName; Console.WriteLine("执行任务发生异常:{0}", s); _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, s, LogType.RunExeFileError); return; } _Process.EnableRaisingEvents = true; _Process.Exited += new EventHandler(_Process_Exited); #region 监控超时 if (_WrkTask.Task.TaskEntity.RunTimeOutSecs > 0) { //ParameterizedThreadStart threadStart = new ParameterizedThreadStart(ThreadWorkMonitor); //Thread th = new Thread(threadStart); //th.IsBackground = true; //th.Start(_Process); ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadWorkMonitor), _Process); } #endregion } else { string s = string.Format("目标位置不存在文件,无法执行该任务({0})", destFile); ; Console.WriteLine(s); _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, s, LogType.TaskConfigAssemblyFileNotFind); } #endregion } catch (Exception ex) { LogEntity log = new LogEntity(); log.LogContent = ex.Message; log.LogType = LogType.EnforceKillWorkError; log.TaskID = _WrkTask.Task.TaskEntity.ID; log.TaskName = _WrkTask.Task.TaskEntity.Name; _BLL.WriteLog(log); Console.WriteLine("执行任务发生异常:{0}", ex.Message); } }
/// <summary> /// 手动执行一个任务 /// </summary> /// <param name="paraTaskId"></param> /// <param name="paraRunType"></param> /// <returns></returns> public bool ManualRunTask(Int64 paraTaskId, RunTaskType paraRunType) { lock (((ICollection)_TaskList).SyncRoot) { IWorkingTask task = _TaskList.Find(delegate(IWorkingTask wt) { return wt.Task.TaskEntity.ID == paraTaskId; }); if (task != null) { task.Worker.DoWork(paraRunType); return true; } else { Console.WriteLine("任务列表中不存在ID为:{0}的任务。", paraTaskId); return false; } } }
/// <summary> /// 开始工作 /// </summary> /// <param name="paraRunType">被调度方式</param> public override void DoWork(RunTaskType paraRunType) { try { Console.WriteLine("************************** Work Start {0} {1}", _WrkTask.Task.TaskEntity.Name, DateTime.Now); #region 开始工作 string destFile = Utility.AssemblyHelper.GetAssemblyPath() + _WrkTask.Task.TaskAssembly.AppFile; //最好用Path.Combine if (File.Exists(destFile)) { FileInfo fi = new FileInfo(destFile); object obj; #region 反射加载 try { Assembly abl; List<Assembly> assmlys = new List<Assembly>(); assmlys.AddRange(AppDomain.CurrentDomain.GetAssemblies()); abl = assmlys.Find(delegate(Assembly aa) { return aa.Location.Equals(fi.FullName); }); assmlys = null; if (abl == null) { abl = System.Reflection.Assembly.LoadFrom(fi.FullName); } obj = abl.CreateInstance(_WrkTask.Task.TaskAssembly.ProtocolNameSpace + "." + _WrkTask.Task.TaskAssembly.ProtocolClass); } catch (System.Reflection.TargetInvocationException ex) //捕获反射错误的异常 { string s = "无法加载目标对象,请检查与目标对象相关联的引用是否存在。" + ex.Message; Console.WriteLine("执行任务发生异常:{0}", s); _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, s, LogType.ReflectError); return; } #endregion #region 转换为ITask接口 if (obj is ITask) { _WorkInterface = (ITask)obj; } else { string s = "无法加载目标对象,目标对象未继承ITask接口。"; Console.WriteLine("执行任务发生异常:{0}", s); _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, s, LogType.TypeConvertITaskError); base.DoWork(paraRunType); return; } #endregion _WorkInterface.OnFuncComplete = new WaitCallback(Process_Exited); _WorkInterface.ExtraParaStr = _WrkTask.Task.TaskEntity.ExtraParaStr; Thread thWork = new Thread(new ThreadStart(_WorkInterface.RunTask)); _Thread4Work = thWork; _Thread4Work.IsBackground = true; _Thread4Work.Start(); #region 监控超时 if (_WrkTask.Task.TaskEntity.RunTimeOutSecs > 0) { //ParameterizedThreadStart threadStart = new ParameterizedThreadStart(WorkMonitor); //Thread th = new Thread(threadStart); //th.IsBackground = true; //th.Start(thWork); ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncWorkMonitor), thWork); //th.Start(_WorkInterface); } #endregion } else { string s = string.Format("目标位置不存在文件,无法执行该任务({0})", destFile); Console.WriteLine(s); _BLL.WriteLog(_WrkTask.Task.TaskEntity.ID, _WrkTask.Task.TaskEntity.Name, s, LogType.TaskConfigAssemblyFileNotFind); //return; } #endregion base.DoWork(paraRunType); } catch (Exception ex) { LogEntity log = new LogEntity(); log.LogContent = ex.Message; log.LogType = LogType.EnforceKillWorkError; log.TaskID = _WrkTask.Task.TaskEntity.ID; log.TaskName = _WrkTask.Task.TaskEntity.Name; _BLL.WriteLog(log); Console.WriteLine("执行任务发生异常:{0}", ex.Message); } }