public void DoActions(ScanListItemList theList) { if (theList == null) return; // Run tasks in parallel (as much as is sensible) ActionQueue[] queues = this.ActionProcessorMakeQueues(theList); this.ActionPause = false; // If not /hide, show CopyMoveProgress dialog CopyMoveProgress cmp = null; if (!this.Args.Hide) cmp = new CopyMoveProgress(this, queues); this.ActionProcessorThread = new Thread(this.ActionProcessor) { Name = "ActionProcessorThread" }; this.ActionProcessorThread.Start(queues); if ((cmp != null) && (cmp.ShowDialog() == DialogResult.Cancel)) this.ActionProcessorThread.Abort(); this.ActionProcessorThread.Join(); theList.RemoveAll(x => (x is Action) && (x as Action).Done && !(x as Action).Error); }