public BackgroundWorkerItem(WorkerArgument <object> wa, int key, BackgroundWorker <WorkerArgument <object>, object, object> backgroundWorker)
     : base(
         progress: backgroundWorker.GetProgress().Select(_ => new ProgressChangedEventArgs(_.ProgressPercentage, _.UserState)),
         completion: backgroundWorker.GetCompletion().Select(_ => (AsyncCompletedEventArgs)_),
         actn: () => backgroundWorker.RunWorkerAsync(wa),
         key: key.ToString())
 {
 }
        public BackgroundWorkerCommandQueue(IObservable <WorkerArgument <T> > mainMethod = null) : base(_backgroundWorker.GetCompletion().Select(_ => _.Result))
        {
            _busy = new System.Threading.ManualResetEvent(true);

            _backgroundWorker.DoWork += new EventHandler <DoWorkEventArgs <WorkerArgument <T>, T> >((a, b) => { new BackgroundWorkerDoWork(_busy).DoWork_Handler(_backgroundWorker, b); });

            int i = 0;

            mainMethod?.Subscribe(_ =>
            {
                i++;
                var x = new BackgroundWorkerItem <T>(_, i, _backgroundWorker);
                Enqueue(x);
            });

            React(commands);
        }