/// <summary> /// 执行task,改函数进程阻塞,等到该任务被执行并返回结果。 /// 如果当前已经有任务正在执行,那么直接返回fail。 /// 线程不安全! /// </summary> /// <param name="task"></param> /// <returns>执行结果</returns> public KancolleTaskResult DoTask(KancolleTask task) { //始终保持只有1个task在运行 if (TaskRemaining > 0 || RunningTask != null) { var result = new KancolleTaskResult(task, KancolleTaskResultType.Fail, "当前正在执行其他任务!", ExistRunningTask); OnTaskFinished(this, result); return(result); } LastResult = null; EnqueueTask(task); while (LastResult == null) { Thread.Sleep(500); } return(LastResult); }
private void TaskThreadHandler() { while (!bExit) { //当前没有任务 if (taskQueue.Count == 0) { Thread.Sleep(1000); continue; } var currentTask = taskQueue.Dequeue(); RunningTask = currentTask; OnTaskChanged?.InvokeAll(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, currentResponse)); OnTaskStart?.InvokeAll(this); KancolleTaskResult result = null; if (currentTask is OrganizeTask) { result = Organize(currentTask as OrganizeTask); } else if (currentTask is SupplyTask) { result = Supply(currentTask as SupplyTask); } else if (currentTask is QuestTask) { result = Quest(currentTask as QuestTask); } else if (currentTask is MissionTask) { result = Mission(currentTask as MissionTask); } else if (currentTask is MapTask) { result = Map(currentTask as MapTask); } else if (currentTask is BattleTask) { result = Battle(currentTask as BattleTask); } else if (currentTask is RemodelTask) { result = Remodel(currentTask as RemodelTask); } else if (currentTask is RepairTask) { result = Repair(currentTask as RepairTask); } else if (currentTask is RefreshDataTask) { result = RefreshData(currentTask as RefreshDataTask); } if (result == null) { result = new KancolleTaskResult(currentTask, KancolleTaskResultType.Fail, $"未能处理当前类型任务【{currentTask.GetType().Name}】", UnknownTaskType); } RunningTask = null; LastResult = result; OnTaskFinished?.Invoke(this, result); Thread.Sleep(1000); } MessageBox.Show("thread finish"); }