Example #1
0
        private BackgroundWorker GetBackgroundWorker(DoWorkQueuedEventHandler doWork, RunWorkerCompletedEventHandler workerCompleted)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.WorkerReportsProgress = false;
            bw.WorkerSupportsCancellation = false;

            bw.DoWork += (sender, args) =>
                             {
                                 if (doWork != null)
                                 {
                                     args.Result=doWork(this, new DoWorkEventArgs(args.Argument));
                                 }
                             };

            bw.RunWorkerCompleted += (sender, args) =>
                                         {
                                             if (workerCompleted != null)
                                             {
                                                 object result = args.Error == null ? args.Result : null;
                                                 workerCompleted(this,
                                                                 new RunWorkerCompletedEventArgs(result, args.Error,
                                                                                                 args.Cancelled));
                                             }
                                             Queue.Dequeue();
                                             lock (_lock)
                                             {
                                                 if (Queue.Count > 0)
                                                 {
                                                     ((BackgroundWorker)this.Queue.Peek()).RunWorkerAsync();
                                                 }
                                             }
                                         };
            return bw;
        }
        private BackgroundWorker GetBackgroundWorker(DoWorkQueuedEventHandler doWork, RunWorkerCompletedEventHandler workerCompleted)
        {
            BackgroundWorker bw = new BackgroundWorker();

            bw.WorkerReportsProgress      = false;
            bw.WorkerSupportsCancellation = false;

            bw.DoWork += (sender, args) =>
            {
                if (doWork != null)
                {
                    args.Result = doWork(this, new DoWorkEventArgs(args.Argument));
                }
            };

            bw.RunWorkerCompleted += (sender, args) =>
            {
                if (workerCompleted != null)
                {
                    object result = args.Error == null ? args.Result : null;
                    workerCompleted(this,
                                    new RunWorkerCompletedEventArgs(result, args.Error,
                                                                    args.Cancelled));
                }
                Queue.Dequeue();
                lock (_lock)
                {
                    if (Queue.Count > 0)
                    {
                        ((BackgroundWorker)this.Queue.Peek()).RunWorkerAsync();
                    }
                }
            };
            return(bw);
        }
Example #3
0
        public void RunWorkerAsync(DoWorkQueuedEventHandler doWork, RunWorkerCompletedEventHandler workerCompleted)
        {
            BackgroundWorker bw = GetBackgroundWorker(doWork, workerCompleted);

            Queue.Enqueue(bw);

            lock (_lock)
            {
                if (Queue.Count == 1)
                {
                    ((BackgroundWorker)this.Queue.Peek()).RunWorkerAsync();
                }
            }
        }
        public void RunWorkerAsync(DoWorkQueuedEventHandler doWork, RunWorkerCompletedEventHandler workerCompleted)
        {
            BackgroundWorker bw = GetBackgroundWorker(doWork, workerCompleted);

            Queue.Enqueue(bw);

            lock (_lock)
            {
                if (Queue.Count == 1)
                {
                    ((BackgroundWorker)this.Queue.Peek()).RunWorkerAsync();
                }
            }
        }