Example #1
0
        public JobControl <T> AddJob(T job, Progress <ProgressUpdatedEventArgs> progress, Func <JobControl <T>, CancellationTokenSource, Task <string> > createTask)
        {
            var cancellationTokenSource = new CancellationTokenSource();

            var jobControl = new JobControl <T>()
            {
                Start = DateTime.UtcNow,
                Job   = job,
                CancellationTokenSource = cancellationTokenSource,
            };

            var progressHandler = (EventHandler <ProgressUpdatedEventArgs>)((sender, e) =>
            {
                jobControl.OnProgressUpdated(e);
                this.RaisePropertyChanged("Jobs");
            });

            progress.ProgressChanged += progressHandler;
            jobControl.Task           = createTask(jobControl, cancellationTokenSource);

            Task.Run(async() =>
            {
                try
                {
                    await jobControl.Task;
                }
                finally
                {
                    jobControl.OnCompleted();
                    jobControl.ProgressUpdated -= progressHandler;
                    this.RaisePropertyChanged("Jobs");
                }
            });

            this.TryAddJob(jobControl);
            return(jobControl);
        }