//---------------------------------------------------------------------
        public void AddProcess(ProgressProcess process)
        {
            if (process == null)
            {
                throw new ArgumentNullException(nameof(process));
            }

            _processes.Insert(0, process);
        }
        private ProgressProcess _getNextProcess(int startIndex)
        {
            ProgressProcess nextProcess = null;

            for (var i = startIndex; (i >= 0) && (i < _processes.Count); i--)
            {
                var process = _processes[i];
                if (process.State == ProgressProcessState.Waiting)
                {
                    nextProcess = process;
                    break;
                }
            }
            return(nextProcess);
        }
        //---------------------------------------------------------------------
        private int _findProcessIndex(ProgressProcess process)
        {
            var processIndex = -1;

            if (process != null)
            {
                for (var i = _processes.Count - 1; i >= 0; i--)
                {
                    var tmpProcess = _processes[i];
                    if (ReferenceEquals(tmpProcess, process))
                    {
                        processIndex = i;
                        break;
                    }
                }
            }
            return(processIndex);
        }
        //---------------------------------------------------------------------
        public ProgressProcess GetNextProcessAndDecrementRunProcessCount(ProgressProcess process)
        {
            var processIndex = _findProcessIndex(process);

            if (processIndex == -1)
            {
                return(null);
            }

            _processes.RemoveAt(processIndex);

            var nextProcess = _getNextProcess(processIndex - 1);

            if (_processes.Count == 0)
            {
                _resetRunProcessCount();
            }

            return(nextProcess);
        }
 public void RemoveProcess(ProgressProcess process)
 {
     _processes.Remove(process);
 }