private IReconstructionProcessor StartPipeline(IFileMonitor fileMonitor, PermStorageFolderStructure folderStructure) { BlockingCollection <TempProjectionInfo> queue1 = new BlockingCollection <TempProjectionInfo>(); BlockingCollection <PermProjectionInfo> queue2 = new BlockingCollection <PermProjectionInfo>(); var eventHandler = _projectionPipelineFactory.CreateFileMonitorListener(folderStructure, queue1); fileMonitor.Created += eventHandler.OnNewFileDetected; fileMonitor.Finished += eventHandler.OnMonitorFinished; var copier = _projectionPipelineFactory.CreateProjectionCopier(queue1, queue2, folderStructure); TaskWatcher.AddTask(copier.StartCopyingFiles()); var reconstructionProcessor = _projectionPipelineFactory.CreateReconstructionProcessor(queue2, folderStructure); TaskWatcher.AddTask(reconstructionProcessor.StartConsumingProjections()); return(reconstructionProcessor); }