Esempio n. 1
0
 /// <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);
 }
Esempio n. 2
0
        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");
        }