Exemplo n.º 1
0
        public void Cancel(Guid taskId)
        {
            if (CurrentTasks.ContainsKey(taskId))
            {
                var ea = new TaskmanagerEventArgs() { Task = new TaskBase() { UniqueId = taskId } };

                CancellingTask(this, ea);

                var value = CurrentTasks[taskId];
                TaskEntry s = new TaskEntry();

                s.State = "cancelled";
                s.Message = "Cancelled by user";

                s.UniqueId = value.UniqueId;
                s.Description = value.TaskDescription; ;
                s.Name = value.Name;
                s.TimeStamp = value.TimeStamp;
                ProcessedTasks.TryAdd(s.UniqueId, s);

                value.Cancel();

                ITask irt;
                if (CurrentTasks.TryRemove(s.UniqueId, out irt))
                {
                    ea.Task = irt;
                    CancelledTask(this, ea);
                    irt.Dispose();
                }
            }
            else if (QueuedTasks.ContainsKey(taskId))
            {
                TaskEntry te;
                if (QueuedTasks.TryRemove(taskId, out te))
                {
                    te.State = "cancelled";
                    te.Message = "Cancelled by user";
                    ProcessedTasks.TryAdd(te.UniqueId, te);
                }
            }
        }
Exemplo n.º 2
0
        private void manageTask(ITask value)
        {
            StartingTask.Raise(this, new TaskmanagerEventArgs() { Task = value });

            TaskEntry entry;
            if (QueuedTasks.TryGetValue(value.UniqueId, out entry))
            {
                if (entry.State == "pending")
                {
                    Exception exception = null;
                    try
                    {
                        CurrentTasks.TryAdd(value.UniqueId, value);

                        TaskEntry s;
                        QueuedTasks.TryRemove(value.UniqueId, out s);

                        StartedTask.Raise(this, new TaskmanagerEventArgs() { Task = value });
                        value.Run();
                    }
                    catch (Exception ex)
                    {
                        exception = ex;

                        Log.Error(ex.ToString());

                        TaskEntry s;
                        QueuedTasks.TryRemove(value.UniqueId, out s);

                        s.State = "error";
                        s.Message = ex.ToString() + "\n " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString();

                        s.UniqueId = value.UniqueId;
                        s.Description = value.TaskDescription; ;
                        s.Name = value.Name;
                        s.TimeStamp = value.TimeStamp;

                        ProcessedTasks.TryAdd(s.UniqueId, s);

                        ITask irt;
                        CurrentTasks.TryRemove(s.UniqueId, out irt);
                    }
                    finally
                    {
                        var ea = new TaskmanagerEventArgs() { Task = value, Exception = exception };
                        EndingTask.Raise(this, ea);

                        TaskEntry s;
                        QueuedTasks.TryRemove(value.UniqueId, out s);

                        s.State = "completed";
                        s.Message = "Completed on: " + DateTime.Now.ToString();

                        s.UniqueId = value.UniqueId;
                        s.Name = value.Name;
                        s.Description = value.TaskDescription;

                        s.TimeStamp = value.TimeStamp;

                        ProcessedTasks.TryAdd(s.UniqueId, s);

                        ITask irt;
                        CurrentTasks.TryRemove(s.UniqueId, out irt);

                        if (exception == null)
                            value.End();

                        EndedTask.Raise(this, ea);
                        value.Dispose();
                    }
                }
                else
                {
                    TaskEntry s;
                    QueuedTasks.TryRemove(value.UniqueId, out s);

                    ProcessedTasks.TryAdd(s.UniqueId, s);
                    value.Cancel();
                }
            }
        }
Exemplo n.º 3
0
        public void Add(ITask task)
        {
            var ea = new TaskmanagerEventArgs() { Task = task };
            AddingTask.Raise(this, ea);

            var t = task;
            t.TimeStamp = DateTime.Now;
            t.UniqueId = Guid.NewGuid();

            TaskEntry te = new TaskEntry();
            te.State = "pending";
            te.UniqueId = t.UniqueId;
            te.User = "******";
            te.TimeStamp = t.TimeStamp;
            te.Name = t.Name;

            te.Message = "Awaiting processing.";

            te.Description = task.TaskDescription;

            //Display of queued items:
            QueuedTasks.TryAdd(t.UniqueId, te);

            t.OnStatusChange += new EventHandler<TaskEventArgs>(value_OnStatusChange);

            //Processing the tasks:
            if (t.ByPassQueue)
            {
                if (secondaryTasks.TryAdd(t))
                    AddedTask.Raise(this, ea);
            }
            else
            {
                if (tasks.TryAdd(t))
                    AddedTask.Raise(this, ea);
            }
        }