コード例 #1
0
        protected void RaiseStateChanged()
        {
            TaskStateChanged d = this.StateChanged;

            if (d != null)
            {
                d();
            }
        }
コード例 #2
0
        public ClientResult Post([FromBody] TaskStateChanged signal)
        {
            return(new ClientResult
            {
                State = true,

                Message = $"Signal TaskStateChanged"
            });
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
                }
            }
        }
コード例 #5
0
        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 });
            }
        }
コード例 #6
0
        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})");
                    }
                }
            }
        }
コード例 #7
0
ファイル: IWaifuTask.cs プロジェクト: DefEspurr/AutoWaifu
 protected void InvokeTaskStateChanged()
 {
     TaskStateChanged?.Invoke(TaskState);
 }
コード例 #8
0
 private void UpdateStatus(double progress = 0)
 {
     Progress = progress;
     TaskStateChanged?.Invoke(this, new TaskStateChangedEventArgs(Task, Status, Progress));
 }
コード例 #9
0
 private void UpdateStatus(TaskExecutionStatus status, double progress = 0)
 {
     Status   = status;
     Progress = progress;
     TaskStateChanged?.Invoke(this, new TaskStateChangedEventArgs(Task, Status, Progress));
 }