private void RegisterWorker(RootSet roots) { OperationWorker worker = new OperationWorker(threadsPerWorker, roots.ToString()); worker.ProgressMade += Worker_ProgressMade; workers.Add(roots, worker); if (State == OperationState.Running) { worker.Start(); } }
public void AddOperation(IOOperation op) { if (State == OperationState.Terminated) throw new InvalidOperationException("This OperationManager has been terminated."); string root = Path.GetPathRoot(op.FileName); string destinationRoot = ""; if (op is CopyOperation) { destinationRoot = Path.GetPathRoot(((CopyOperation)op).TransferDestination); } RootSet roots = new RootSet(root, destinationRoot); if (!workers.ContainsKey(roots)) RegisterWorker(roots); workers[roots].EnqueueOperation(op); }