예제 #1
0
        // 按照命令启动一个批处理任务(不是自动启动)
        public int StartBatchTask(string strName,
                                  TaskInfo param,
                                  out TaskInfo info,
                                  out string strError)
        {
            strError = "";
            info     = null;

            if (strName == "!continue")
            {
                this.PauseBatchTask = false;
                return(0);
            }

            // 2007/12/18
            if (this.HangupReason == HangupReason.LogRecover)
            {
                strError = "当前系统正处在LogRecover挂起状态,无法启动新的批处理任务";
                return(-1);
            }

            // 2012/2/4
            if (this.PauseBatchTask == true)
            {
                strError = "当前所有批处理任务均处在暂停状态,无法启动新的批处理任务";
                return(-1);
            }

            List <BatchTask> tasks = this.BatchTasks.GetBatchTask(strName);

            if (tasks == null || tasks.Count == 0)
            {
                // 创建新的任务
                BatchTask task = null;

                if (string.IsNullOrEmpty(strName) == false && strName[0] == '#')
                {
                    strError = "不允许用 '#' 方式启动任务";
                    return(-1);
                }

                if (strName == "预约到书管理")
                {
                    task = new RebuildKeysTask(this, strName);
                }
                else
                {
                    strError = "系统不能识别任务名 '" + strName + "'";
                    return(-1);
                }

                try
                {
                    this.BatchTasks.Add(task);
                }
                catch (Exception ex)
                {
                    strError = ExceptionUtil.GetAutoText(ex);
                    return(-1);
                }

                tasks.Add(task);
            }

            // BatchTask task = this.BatchTasks.GetBatchTask(strName);
            else
            {
                string strNameString = "";
                foreach (BatchTask task in tasks)
                {
                    bool bOldStoppedValue = task.Stopped;

                    if (bOldStoppedValue == false)
                    {
                        // 激活 2007/10/10
                        task.eventActive.Set();
                        task.ManualStart = true;    // 表示为命令启动

                        if (string.IsNullOrEmpty(strNameString) == false)
                        {
                            strNameString += ",";
                        }
                        strNameString += task.Name + "(ID=" + task.ID + ")";
                    }
                }

                if (string.IsNullOrEmpty(strNameString) == false)
                {
                    strError = "任务 " + strNameString + " 已经在运行中,不能重复启动。本次操作激活了这些(个)任务。";
                    return(-1);
                }
            }

            {
                BatchTask task = tasks[0];

                task.ManualStart = true;    // 表示为命令启动
                task.StartInfo   = param.StartInfo;
                task.ClearProgressFile();   // 清除进度文件内容
                task.StartWorkerThread();

                info = task.GetCurrentInfo(param.ResultOffset,
                                           param.MaxResultBytes);
            }

            return(0);
        }
예제 #2
0
        // 按照命令启动一个批处理任务(不是自动启动)
        public int StartBatchTask(string strName,
            TaskInfo param,
            out TaskInfo info,
            out string strError)
        {
            strError = "";
            info = null;

            if (strName == "!continue")
            {
                this.PauseBatchTask = false;
                return 0;
            }

            // 2007/12/18
            if (this.HangupReason == HangupReason.LogRecover)
            {
                strError = "当前系统正处在LogRecover挂起状态,无法启动新的批处理任务";
                return -1;
            }

            // 2012/2/4
            if (this.PauseBatchTask == true)
            {
                strError = "当前所有批处理任务均处在暂停状态,无法启动新的批处理任务";
                return -1;
            }

            List<BatchTask> tasks = this.BatchTasks.GetBatchTask(strName);
            if (tasks == null || tasks.Count == 0)
            {
                // 创建新的任务
                BatchTask task = null;

                if (string.IsNullOrEmpty(strName) == false && strName[0] == '#')
                {
                    strError = "不允许用 '#' 方式启动任务";
                    return -1;
                }

                if (strName == "预约到书管理")
                    task = new RebuildKeysTask(this, strName);
                else
                {
                    strError = "系统不能识别任务名 '" + strName + "'";
                    return -1;
                }

                try
                {
                    this.BatchTasks.Add(task);
                }
                catch (Exception ex)
                {
                    strError = ExceptionUtil.GetAutoText(ex);
                    return -1;
                }

                tasks.Add(task);
            }

            // BatchTask task = this.BatchTasks.GetBatchTask(strName);
            else
            {
                string strNameString = "";
                foreach (BatchTask task in tasks)
                {
                    bool bOldStoppedValue = task.Stopped;

                    if (bOldStoppedValue == false)
                    {
                        // 激活 2007/10/10
                        task.eventActive.Set();
                        task.ManualStart = true;    // 表示为命令启动

                        if (string.IsNullOrEmpty(strNameString) == false)
                            strNameString += ",";
                        strNameString += task.Name + "(ID=" + task.ID + ")";
                    }
                }

                if (string.IsNullOrEmpty(strNameString) == false)
                {
                    strError = "任务 " + strNameString + " 已经在运行中,不能重复启动。本次操作激活了这些(个)任务。";
                    return -1;
                }
            }

            {
                BatchTask task = tasks[0];

                task.ManualStart = true;    // 表示为命令启动
                task.StartInfo = param.StartInfo;
                task.ClearProgressFile();   // 清除进度文件内容
                task.StartWorkerThread();

                info = task.GetCurrentInfo(param.ResultOffset,
                    param.MaxResultBytes);
            }

            return 0;
        }