public Job(AsyncWorkQueue queue, IWorkAsyncWrapper work)
 {
     this.queue                 = queue ?? throw new ArgumentNullException(nameof(queue));
     this.Work                  = work ?? throw new ArgumentNullException(nameof(work));
     this.postWorkCallBack      = work.PostWorkCallBack;
     this.Work.PostWorkCallBack = PostWorkCallBack;
 }
        public void WorkAsync(IWorkAsyncWrapper info)
        {
            Working += 1;
            var backgroundWorker = new BackgroundWorker();

            queueWorkers.Enqueue(backgroundWorker);

            if (info.Work == null && info.PostWorkCallBack == null)
            {
                throw new Exception("No Work to be done");
            }

            backgroundWorker.DoWork += new DoWorkEventHandler((sender, args) =>
            {
                info.Work?.Invoke(backgroundWorker, args);
            });

            backgroundWorker.ProgressChanged += new ProgressChangedEventHandler((sender, args) =>
            {
                info.ProgressChanged?.Invoke(args);
            });

            backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((sender, args) =>
            {
                info.PostWorkCallBack?.Invoke(args);
                queueWorkers.Dequeue();
                Working -= 1;
            });

            backgroundWorker.RunWorkerAsync(info.AsyncArgument);
        }
 public void WorkAsync(IWorkAsyncWrapper info)
 {
     BackgroundWorker = CreateBackgroundWorker();
     DoWorkEventArgs  = CreateWorkEventArgs(info.AsyncArgument);
     info.Work?.Invoke(BackgroundWorker, DoWorkEventArgs);
     RunWorkerCompletedEventArgs = CreateWorkCompletedEventArgs(DoWorkEventArgs);
     info.PostWorkCallBack?.Invoke(RunWorkerCompletedEventArgs);
 }
        public void Enqueue(IWorkAsyncWrapper work)
        {
            var job = new Job(this, work);

            if (!queue.Any())
            {
                toolViewModel.AllowRequests = false;
                solutionPackagerControl.WorkAsync(job.Work);
            }
            queue.Enqueue(job);
        }
        public void WorkAsync(IWorkAsyncWrapper info)
        {
            if (info == null)
            {
                throw new ArgumentNullException(nameof(info));
            }
            var workAsyncInfo = new WorkAsyncInfo();

            if (info.AsyncArgument != null)
            {
                workAsyncInfo.AsyncArgument = info.AsyncArgument;
            }
            if (info.Host != null)
            {
                workAsyncInfo.Host = info.Host;
            }
            if (info.IsCancelable)
            {
                workAsyncInfo.IsCancelable = info.IsCancelable;
            }
            if (info.Message != null)
            {
                workAsyncInfo.Message = info.Message;
            }
            if (info.MessageHeight > 0)
            {
                workAsyncInfo.MessageHeight = info.MessageHeight;
            }
            if (info.MessageWidth > 0)
            {
                workAsyncInfo.MessageWidth = info.MessageWidth;
            }
            if (info.PostWorkCallBack != null)
            {
                workAsyncInfo.PostWorkCallBack = info.PostWorkCallBack;
            }
            if (info.ProgressChanged != null)
            {
                workAsyncInfo.ProgressChanged = info.ProgressChanged;
            }
            if (info.Work != null)
            {
                workAsyncInfo.Work = info.Work;
            }
            WorkAsync(workAsyncInfo);
        }