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); }
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(); } } }