protected void RaiseStateChanged() { TaskStateChanged d = this.StateChanged; if (d != null) { d(); } }
public ClientResult Post([FromBody] TaskStateChanged signal) { return(new ClientResult { State = true, Message = $"Signal TaskStateChanged" }); }
private void AddTask <T>(ITask <T> task, TaskCallback <T> callback) where T : class { String[] items = new String[] { (++this._taskID).ToString(), task.Name, task.State.GetStateDescription(), task.Information }; ListViewItem item = new ListViewItem(items); item.Tag = task; CrossThreadAddItem(this.lvwTasks, item); //Ensure that the Task Information gets updated automatically when the Task State changes TaskStateChanged d = delegate() { CrossThreadAlterSubItem(item, 2, task.State.GetStateDescription()); CrossThreadAlterSubItem(item, 3, task.Information); CrossThreadRefresh(this.lvwTasks); }; task.StateChanged += d; //Clear old Tasks if necessary and enabled if (this.chkRemoveOldTasks.Checked) { if (this.lvwTasks.Items.Count > 10) { int i = this.lvwTasks.Items.Count - 1; do { ListViewItem oldItem = this.lvwTasks.Items[i]; if (oldItem.Tag is ITaskBase) { ITaskBase t = (ITaskBase)oldItem.Tag; if (t.State == TaskState.Completed || t.State == TaskState.CompletedWithErrors) { this.lvwTasks.Items.RemoveAt(i); i--; } } i--; } while (this.lvwTasks.Items.Count > 10 && i >= 0); } } //Start the Task task.RunTask(callback); }
private void ProcessStartTaskResults(List <TaskItem> tasks, TaskResult[] results) { using (Trace.Log()) { Debug.Assert(results.Length == tasks.Count); Console.WriteLine("ProcessStartTaskResults"); var successful = new List <TaskItem>(); var failed = new List <TaskItem>(); for (int i = 0; i < results.Length; ++i) { var task = tasks[i]; var result = results[i]; if (result.success) { Console.WriteLine($"Task started {task.Identifier}"); successful.Add(task); if (!activeTasks.TryAdd(task.Identifier, task)) { throw new Exception($"Failed to add task {task}"); } } else { Console.WriteLine($"Failed to start task {task.Identifier}"); Console.WriteLine(result.errorMessage); failed.Add(task); // we wan't all calls to job to be outside the lock to prevent potential deadlocks activeJob.CompleteTask(task, result); } pendingTasks.TryRemove(task.Identifier, out var pendingTask); } if (successful.Count > 0) { TaskStateChanged.Invoke(this, TaskState.Active, successful); } if (failed.Count > 0) { TaskStateChanged.Invoke(this, TaskState.Failed, failed); } } }
private void OnTaskCompleted(TaskItem task, TaskResult result) { using (Trace.Log()) { if (disposed) { Console.WriteLine($"WARNING: Agent {Identifier} returning tasks ({task}) when disposed"); return; } if (!initialized) { Console.WriteLine($"WARNING: Agent {Identifier} returning tasks ({task}) when not initialized"); return; } Console.WriteLine($"Agent {Identifier} Task Completed {task}"); if (result.success) { Console.WriteLine($"Task completed successfully {task.Identifier}"); } else { Console.WriteLine($"Task failed {task.Identifier}"); Console.WriteLine(result.errorMessage); } activeTasks.TryRemove(task.Identifier, out var taskItem); // exit agent lock before calling job to prevent potential deadlocks activeJob.CompleteTask(task, result); RequestTasks(); TaskStateChanged?.Invoke(this, TaskState.Completed, new TaskItem[] { task }); } }
private async void StartTasks(int count) { using (Trace.Log()) { var tasks = GetNewTasks(count); Console.WriteLine($"StartTasks: {tasks.Count}/{count}"); if (tasks.Count > 0) { TaskStateChanged?.Invoke(this, TaskState.Pending, tasks); try { var results = await connection.StartTasks(tasks); ProcessStartTaskResults(tasks, results); } catch (Exception e) { Console.WriteLine($"Failed to start tasks ({e.Message})"); } } } }
protected void InvokeTaskStateChanged() { TaskStateChanged?.Invoke(TaskState); }
private void UpdateStatus(double progress = 0) { Progress = progress; TaskStateChanged?.Invoke(this, new TaskStateChangedEventArgs(Task, Status, Progress)); }
private void UpdateStatus(TaskExecutionStatus status, double progress = 0) { Status = status; Progress = progress; TaskStateChanged?.Invoke(this, new TaskStateChangedEventArgs(Task, Status, Progress)); }