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();
         }
     }
 }
 internal void StopTask(cGatherTask task)
 {
     if (task.TaskState == cGlobalParas.TaskState.Started || task.TaskState == cGlobalParas.TaskState.Waiting)
     {
         task.Stop();
     }
 }
        /// �Ƴ�����ȡ������
        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);
        }
 internal void ReStartTask(cGatherTask task)
 {
     task.ResetTaskData();
     StartTask(task);
 }
        //���ݲɼ������״̬�Զ�ά���ɼ������еIJɼ���������
        //��ǰ��Ϊ����ɼ�����(����/ʧ��/�ȴ�/���)���ȴ������е�
        //���񽫲��ϵ����ԣ����Զ�ִ��
        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;
                }
            }
        }
 /// <summary>
 /// ��������
 /// </summary>
 /// <param name="task"></param>
 internal void FinishTask(cGatherTask task)
 {
     m_FinishTaskQueue.Enqueue(task);
 }
        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;
                }
            }
        }
 //ǿ�ƽ���ij������
 internal void Abort(cGatherTask task)
 {
     task.Abort();
 }
        /// ��ɼ��������������һ���ɼ�����
        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;
            }
        }
        //����ǿ����ֹ�������¼������������䷵���κ���Ϣ
        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;

            }
        }
 public void Abort(cGatherTask task)
 {
     m_TaskManage.TaskListControl.Abort(task);
     m_TaskManage.TaskListControl.AutoList(task);
 }
 /// ָֹͣ���IJɼ�����
 public void Stop(cGatherTask  task)
 {
     m_TaskManage.TaskListControl.StopTask(task);
 }
 /// ��ʼָ���IJɼ�����
 public void Start(cGatherTask task)
 {
     if (!m_IsInitialized)
     {
         timerInit();
     }
     m_TaskManage.TaskListControl.StartTask(task);
 }
 /// ���¿�ʼָ���IJɼ�����
 public void ReStart(cGatherTask task)
 {
     m_TaskManage.TaskListControl.ReStartTask(task);
 }
 /// ɾ��ָ���IJɼ�����
 public void Remove(cGatherTask task)
 {
     m_TaskManage.TaskListControl.RemoveTask(task);
 }