예제 #1
0
        /// 向采集任务队列中增加一个采集任务
        public void Add(cTaskData tData)
        {
            try
            {
                //新建一个采集任务,并把采集任务的数据传入此采集任务中
                cGatherTask gTask = new cGatherTask(this, tData);

                //初始化此采集任务,主要是注册此任务的相关事件
                TaskInit(gTask);

                //判断此任务是否已经加入此任务数据集合,如果没有加入,则加入集合
                if (!m_TaskDataList.TaskDataList.Contains(tData))
                {
                    m_TaskDataList.TaskDataList.Add(tData);
                }

                //将此采集任务添加到采集任务队列中
                m_list_Task.Add(gTask);

                //根据添加的任务状态,自动维护队列的信息
                m_GatherTaskList.AutoList(gTask);

                //如果任务增加后就是完成的任务,则需要出发完成的
                //事件
                if (gTask.TaskState == cGlobalParas.TaskState.Completed)
                {
                    e_TaskCompleted(gTask, new cTaskEventArgs(gTask.TaskID, gTask.TaskName, false));
                }
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }
예제 #2
0
 internal void StopTask(cGatherTask task)
 {
     if (task.TaskState == cGlobalParas.TaskState.Started || task.TaskState == cGlobalParas.TaskState.Waiting)
     {
         task.Stop();
     }
 }
예제 #3
0
 internal void AutoNext()
 {
     while (m_WaitingTaskList.Count > 0 && (m_MaxTask <= 0 || m_RunningTaskList.Count < m_MaxTask))
     {
         cGatherTask task = m_WaitingTaskList[0];
         task.Start();
     }
 }
예제 #4
0
 /// 开始指定的采集任务
 public void Start(cGatherTask task)
 {
     if (!m_IsInitialized)
     {
         timerInit();
     }
     m_TaskManage.TaskListControl.StartTask(task);
 }
예제 #5
0
 /// <summary>
 /// 回收已完成的线程
 /// </summary>
 ///
 internal void TaskDispose()
 {
     // 释放所有完成的线程
     while (m_FinishTaskQueue.Count > 0)
     {
         cGatherTask dt = m_FinishTaskQueue.Dequeue();
         if (dt.TaskState == cGlobalParas.TaskState.Completed || dt.TaskState == cGlobalParas.TaskState.Stopped)
         {
             dt.TaskSplit.Clear();
         }
     }
 }
예제 #6
0
        private void onTaskAborted(object sender, cTaskEventArgs e)
        {
            cGatherTask task = (cGatherTask)sender;

            // 从任务列表删除
            m_list_Task.Remove(task);
            m_TaskDataList.TaskDataList.Remove(task.TaskData);

            if (e_TaskAborted != null && !e.Cancel)
            {
                e_TaskAborted(sender, e);
            }
        }
예제 #7
0
        /// 移除任务(取消任务)
        internal void RemoveTask(cGatherTask task)
        {
            // 取消任务 删除列表中的所有数据
            if (task.State == cGlobalParas.TaskState.Running || task.State == cGlobalParas.TaskState.Started)
            {
                task.Abort();
            }

            task.Remove();

            task.State = cGlobalParas.TaskState.Aborted;

            AutoList(task);
        }
예제 #8
0
 internal void StartTask(cGatherTask task)
 {
     if (task.TaskState == cGlobalParas.TaskState.UnStart || task.TaskState == cGlobalParas.TaskState.Stopped || task.TaskState == cGlobalParas.TaskState.Failed || task.TaskState == cGlobalParas.TaskState.Aborted)
     {
         if (m_MaxTask <= 0 || m_RunningTaskList.Count < m_MaxTask)
         {
             task.Start();
         }
         else
         {
             task.ReadyToStart();
         }
     }
 }
예제 #9
0
 //任务强制终止,销毁事件关联,不让其返回任何信息
 public void TaskEventDispose(cGatherTask gTask)
 {
     if (gTask.TaskManage.Equals(this))
     {
         gTask.TaskCompleted         -= this.onTaskCompleted;
         gTask.TaskFailed            -= this.onTaskFailed;
         gTask.TaskStopped           -= this.onTaskStopped;
         gTask.TaskStarted           -= this.onTaskStarted;
         gTask.TaskAborted           -= this.onTaskAborted;
         gTask.Log                   -= this.onLog;
         gTask.GData                 -= this.onGData;
         gTask.TaskError             -= this.onTaskError;
         gTask.TaskStateChanged      -= this.onTaskStateChanged;
         gTask.RunTask               -= this.onRunSoukeyTask;
         gTask.TaskThreadInitialized -= this.onTaskThreadInitialized;
     }
 }
예제 #10
0
        private void TaskInit(cGatherTask gTask)
        {
            if (gTask.TaskManage.Equals(this))
            {
                if (!gTask.IsInitialized)
                {
                    gTask.TaskCompleted         += this.onTaskCompleted;
                    gTask.TaskFailed            += this.onTaskFailed;
                    gTask.TaskStopped           += this.onTaskStopped;
                    gTask.TaskStarted           += this.onTaskStarted;
                    gTask.TaskAborted           += this.onTaskAborted;
                    gTask.Log                   += this.onLog;
                    gTask.GData                 += this.onGData;
                    gTask.TaskError             += this.onTaskError;
                    gTask.TaskStateChanged      += this.onTaskStateChanged;
                    gTask.TaskThreadInitialized += this.onTaskThreadInitialized;

                    gTask.RunTask += this.onRunSoukeyTask;

                    gTask.IsInitialized = true;
                }
            }
        }
예제 #11
0
        //根据采集任务的状态自动维护采集队列中的采集任务数据
        //当前分为多个采集队列(运行/失败/等待/完成),等待队列中的
        //任务将不断的重试,即自动执行
        internal void AutoList(cGatherTask task)
        {
            // 任务状态变更事件在所有线程都有触发,此处需要同步
            lock (m_listLock)
            {
                switch (task.TaskState)
                {
                case cGlobalParas.TaskState.Aborted:
                    m_RunningTaskList.Remove(task);
                    m_StoppedTaskList.Remove(task);
                    m_CompletedTaskList.Remove(task);
                    m_WaitingTaskList.Remove(task);
                    break;

                case cGlobalParas.TaskState.Started:
                    if (!m_RunningTaskList.Contains(task))
                    {
                        m_RunningTaskList.Add(task);
                    }
                    m_StoppedTaskList.Remove(task);
                    m_CompletedTaskList.Remove(task);
                    m_WaitingTaskList.Remove(task);
                    break;

                case cGlobalParas.TaskState.Completed:

                    //任务完成后直接进行数据导出,不在向任务完成队列
                    //中添加任务数据,任务导出后直接由taskcompleted列表
                    //接手完成完成任务的控制.
                    if (!m_CompletedTaskList.Contains(task))
                    {
                        m_CompletedTaskList.Add(task);
                    }
                    m_RunningTaskList.Remove(task);
                    break;

                case cGlobalParas.TaskState.UnStart:
                    if (!m_StoppedTaskList.Contains(task))
                    {
                        m_StoppedTaskList.Add(task);
                    }
                    m_WaitingTaskList.Remove(task);
                    m_CompletedTaskList.Remove(task);
                    m_RunningTaskList.Remove(task);
                    break;

                case cGlobalParas.TaskState.Waiting:
                    if (!m_WaitingTaskList.Contains(task))
                    {
                        m_WaitingTaskList.Add(task);
                    }
                    m_StoppedTaskList.Remove(task);
                    m_CompletedTaskList.Remove(task);
                    m_RunningTaskList.Remove(task);
                    break;

                default:
                    if (!m_StoppedTaskList.Contains(task))
                    {
                        m_StoppedTaskList.Add(task);
                    }
                    m_WaitingTaskList.Remove(task);
                    m_RunningTaskList.Remove(task);
                    break;
                }
            }
        }
예제 #12
0
 public void Abort(cGatherTask task)
 {
     m_TaskManage.TaskListControl.Abort(task);
     m_TaskManage.TaskListControl.AutoList(task);
 }
예제 #13
0
 /// 删除指定的采集任务
 public void Remove(cGatherTask task)
 {
     m_TaskManage.TaskListControl.RemoveTask(task);
 }
예제 #14
0
 /// 重新开始指定的采集任务
 public void ReStart(cGatherTask task)
 {
     m_TaskManage.TaskListControl.ReStartTask(task);
 }
예제 #15
0
 /// 停止指定的采集任务
 public void Stop(cGatherTask task)
 {
     m_TaskManage.TaskListControl.StopTask(task);
 }
예제 #16
0
 /// <summary>
 /// 结束任务
 /// </summary>
 /// <param name="task"></param>
 internal void FinishTask(cGatherTask task)
 {
     m_FinishTaskQueue.Enqueue(task);
 }
예제 #17
0
 //强制结束某个任务
 internal void Abort(cGatherTask task)
 {
     task.Abort();
 }
예제 #18
0
 internal void ReStartTask(cGatherTask task)
 {
     task.ResetTaskData();
     StartTask(task);
 }