Atmo.UI.DevEx.ImportDataForm.ImportDataProcesser.MoveData C# (CSharp) Method

MoveData() private method

private MoveData ( object o ) : void
o object
return void
            private void MoveData(object o)
            {
                var atmoFolder =
                    new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Atmo"));
                if (!atmoFolder.Exists)
                    atmoFolder.Create();
                var atmoImportsFolder =
                    new DirectoryInfo(Path.Combine(atmoFolder.FullName, "Imports"));
                if (!atmoImportsFolder.Exists)
                    atmoImportsFolder.Create();

                Action<int> reportProgress = null;
                if(o is BackgroundWorker)
                    reportProgress = (o as BackgroundWorker).ReportProgress;
                else
                    reportProgress = x => {};

                while(true) {
                    ImportDataSet currentSet;
                    lock (_queueLock) {
                        if(_moveSetQueue.Count == 0) {
                            _moveSetQueue = null;
                            break;
                        }
                        currentSet = _moveSetQueue.Dequeue();
                    }

                    foreach (var file in currentSet.Files) {
                        var importTarget = new FileInfo(
                            Path.Combine(
                                Path.Combine(atmoImportsFolder.FullName, file.Nid.ToString()),
                                file.Path.Name
                            )
                        );

                        if (file.Path != importTarget && file.Path.Exists) {
                            if (!importTarget.Directory.Exists)
                                importTarget.Directory.Create();
                            try {
                                file.Path.CopyTo(importTarget.FullName, true);
                                currentSet.MovedToLocation[file] = importTarget;
                                if (_deleteSource) {
                                    file.Path.Delete();
                                }
                            }
                            catch {
                                ;
                            }
                        }
                    }

                    lock(_queueLock) {
                        MoveProgress = (MaxQueue - _moveSetQueue.Count) / (double)MaxQueue;
                        reportProgress((int)(Progress * 100));
                        _importSetQueue.Enqueue(currentSet);
                    }
                }
                lock(_queueLock) {
                    MoveProgress = 1.0;
                    reportProgress((int)(Progress * 100));
                }
            }