コード例 #1
0
        /// <summary>
        /// Raises a task status event
        /// </summary>
        /// <param name="status"></param>
        private void RaiseTasksCompletedEvent(string status)
        {
            TaskStatusEventArg statusArgs = new TaskStatusEventArg
            {
                Status = status
            };

            TasksCompleted?.Invoke(statusArgs);
        }
コード例 #2
0
        public void EditTask(UiModel.Task task)
        {
            switch (task.Status)
            {
            case Status.New:
                UiModel.Task newTask = NewTasks.FirstOrDefault(t => t.Id == task.Id);
                if (newTask != null)
                {
                    Mapper.Map(task, newTask);
                }
                else
                {
                    DeleteFromList(RawTask);
                    task.CompletedDate = null;
                    NewTasks.Add(task);
                }
                break;

            case Status.InProgress:
                UiModel.Task inProgressTask = TasksInProgress.FirstOrDefault(t => t.Id == task.Id);
                if (inProgressTask != null)
                {
                    Mapper.Map(task, inProgressTask);
                }
                else
                {
                    DeleteFromList(RawTask);
                    task.CompletedDate = null;
                    TasksInProgress.Add(task);
                }
                break;

            case Status.Completed:
                UiModel.Task completedTask = TasksCompleted.FirstOrDefault(t => t.Id == task.Id);
                if (completedTask != null)
                {
                    Mapper.Map(task, completedTask);
                }
                else
                {
                    DeleteFromList(RawTask);
                    task.CompletedDate = DateTime.Now;
                    TasksCompleted.Add(task);
                }
                break;
            }
        }
コード例 #3
0
        /// <summary>
        /// Runs the tasks.
        /// </summary>
        private void RunTasks()
        {
            if (completed.Count == Tasks.Count)
            {
                TasksCompleted.RaiseEvent(this);
                return;
            }
            lock (CurrentTasks)
            {
                IEnumerable <TaskWorker> available = Dependancies.GetAvailable(Tasks, Completed);
                available = available.Except(CurrentTasks.Keys);

                foreach (TaskWorker worker in available)
                {
                    List <TaskWorker> ensureNotRunning = new List <TaskWorker>();
                    //Check if we have a key saying that this cannot be run at the same time as...
                    if (PreventSimultaneousRunning.Dependancies.ContainsKey(worker))
                    {
                        ensureNotRunning = PreventSimultaneousRunning.Dependancies[worker].DependsOn.ToList();
                    }

                    //Then see if anything says x is not allowed to be run at the same time as this
                    IEnumerable <Dependacy <TaskWorker> > dependancies = PreventSimultaneousRunning.Dependancies.Where(d => d.Value.DependsOn.Contains(worker)).Select(kvp => kvp.Value);
                    ensureNotRunning.AddRange(dependancies.Select(depend =>
                    {
                        List <TaskWorker> items = new List <TaskWorker>();
                        items.Add(depend.Item);
                        return(items);
                    }).SelectMany(i => i));

                    if (CurrentTasks.Any(t => ensureNotRunning.Contains(t.Value)))
                    {
                        continue;
                    }

                    CurrentTasks.TryAdd(worker, worker);
                    TaskWorkerManager mgr = new TaskWorkerManager(worker);
                    mgr.AutoTryRecover  = AutoTryRecover;
                    mgr.TasksCancelled += mgr_TasksCancelled;
                    mgr.TasksCompleted += mgr_TasksCompleted;
                    mgr.TasksFailed    += mgr_TasksFailed;
                    managers.TryAdd(mgr, mgr);
                    mgr.Start();
                }
            }
        }
コード例 #4
0
        public void DeleteFromList(UiModel.Task task)
        {
            switch (task.Status)
            {
            case Status.New:
                NewTasks.Remove(NewTasks.FirstOrDefault(t => t.Id == task.Id));
                break;

            case Status.InProgress:
                TasksInProgress.Remove(TasksInProgress.FirstOrDefault(t => t.Id == task.Id));
                break;

            case Status.Completed:
                TasksCompleted.Remove(TasksCompleted.FirstOrDefault(t => t.Id == task.Id));
                break;
            }
        }
コード例 #5
0
        public void CreateTask(UiModel.Task task)
        {
            task.Id            = GetId();
            task.CompletedDate = null;
            switch (task.Status)
            {
            case Status.New:
                NewTasks.Add(task);
                break;

            case Status.InProgress:
                TasksInProgress.Add(task);
                break;

            case Status.Completed:
                task.CompletedDate = DateTime.Now;
                TasksCompleted.Add(task);
                break;
            }
        }
コード例 #6
0
        public void DragAndDrop(String name, UiModel.Task task)
        {
            switch (name)
            {
            case nameof(NewTasks):
                if (task.Status != Status.New)
                {
                    DeleteFromList(task);
                    task.Status        = Status.New;
                    task.CompletedDate = null;
                    NewTasks.Add(task);
                    TaskService.Update(Mapper.Map <DataModel.Task>(task));
                }
                break;

            case nameof(TasksInProgress):
                if (task.Status != Status.InProgress)
                {
                    DeleteFromList(task);
                    task.CompletedDate = null;
                    task.Status        = Status.InProgress;
                    TasksInProgress.Add(task);
                    TaskService.Update(Mapper.Map <DataModel.Task>(task));
                }
                break;

            case nameof(TasksCompleted):
                if (task.Status != Status.Completed)
                {
                    DeleteFromList(task);
                    task.CompletedDate = DateTime.Now;
                    task.Status        = Status.Completed;
                    TasksCompleted.Add(task);
                    TaskService.Update(Mapper.Map <DataModel.Task>(task));
                }
                break;
            }
        }
コード例 #7
0
 private void UpdateLabel()
 {
     toolStripLabel2.Text = TasksCompleted.ToString() +
                            LabelSeparator +
                            TasksTotalCount.ToString();
 }
コード例 #8
0
 private void OnCurrentTasksCompleted() => TasksCompleted?.Invoke();