public async Task LoadDirectoryRecursive(DomainExportedObject Parent, string Path) { DirectoryInfo dirInfo = new DirectoryInfo(Path); DirectoryInfo[] dirInfos = await Task.Run(() => dirInfo.GetDirectories()); if (dirInfos.Length > 0) { Parent.Children = dirInfos.Select(dir => new DomainExportedObject { Filename = dir.FullName, Parent = Parent, Children = new List <DomainExportedObject>() }).ToList(); foreach (DomainExportedObject exportedDir in Parent.Children) { await LoadDirectoryRecursive(exportedDir, exportedDir.Filename); } } FileInfo[] files = await Task.Run(() => dirInfo.GetFiles()); if (files.Length > 0) { Parent.Children.AddRange(files.Select(f => new DomainExportedObject { Filename = f.FullName, Parent = Parent }).ToList()); } }
private async void loadExportFiles() { if (String.IsNullOrEmpty(settings.ExportPath)) { return; } try { DomainExportedObject root = new DomainExportedObject(); await repository.LoadDirectoryRecursive(root, settings.ExportPath); if (root.Children == null || !root.Children.Any()) { return; } viewModel.ExportsTree?.Traverse(e => true).ToList().ForEach(e => e.PropertyChanged -= onExportedObjectViewEntityChanged); IEnumerable <ExportedObjectViewEntity> temp = mapper.Map <IEnumerable <ExportedObjectViewEntity> >(root.Children); viewModel.ExportsTree = new ObservableCollection <ExportedObjectViewEntity>(temp); viewModel.ExportsTree.Traverse(e => true).ToList().ForEach(e => e.PropertyChanged += onExportedObjectViewEntityChanged); } catch (FileNotFoundException) { } catch (DirectoryNotFoundException) { } catch (Exception ex) { messenger.Send(new ApplicationErrorMessage { ErrorMessage = ex.Message, Exception = ex }); } }