Пример #1
0
        /// <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
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
 /// <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;
         }
     }
 }
Пример #4
0
        /// <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);
            }
        }