/// <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); }
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; } }
/// <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(); } } }
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; } }
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; } }
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; } }
private void UpdateLabel() { toolStripLabel2.Text = TasksCompleted.ToString() + LabelSeparator + TasksTotalCount.ToString(); }
private void OnCurrentTasksCompleted() => TasksCompleted?.Invoke();