public IEnumerable <TreeNode> EnumerateDataFiles <T>(DataSubFolder subFolder,
                                                             Func <FileInfo, DataFile <T> > fileParser,
                                                             SearchOption searchOption = SearchOption.TopDirectoryOnly)
            where T : class
        {
            switch (searchOption)
            {
            case SearchOption.AllDirectories:
                return
                    (from dataFolder in EnumerateDataFolders(subFolder)
                     let treeNode = new TreeNode(dataFolder.Name)
                {
                    Tag = dataFolder
                }
                     where treeNode.AddChildrenIfAny(
                         dataFolder.EnumerateDataFiles(fileParser),
                         DataFileToTreeNode)
                     select treeNode);

            case SearchOption.TopDirectoryOnly:
                return
                    (new DataFolder(OpenSubFolder(subFolder))
                     .EnumerateDataFiles(fileParser)
                     .Select(DataFileToTreeNode));

            default:
                throw new ArgumentException(searchOption + " is not implemented!", "searchOption");
            }
        }
        private async Task AddDataFilesToTreeAsync <T>(DataSubFolder subFolder,
                                                       Func <FileInfo, DataFile <T> > fileParser,
                                                       SearchOption searchOption = SearchOption.TopDirectoryOnly)
            where T : class
        {
            var dataFiles = dataManagerComponent.EnumerateDataFiles(subFolder, fileParser, searchOption);

            treeViewUnits.Nodes["Node" + subFolder].Nodes.AddRange(await Task.Run(() => dataFiles.ToArray()));
        }
 private DirectoryInfo OpenSubFolder(DataSubFolder subFolder)
 {
     return(DataDirectory.EnumerateDirectories(subFolder.ToString()).Single());
 }
 public IEnumerable <DataFolder> EnumerateDataFolders(DataSubFolder subFolder)
 {
     return(OpenSubFolder(subFolder).EnumerateDirectories().Select(childDir => new DataFolder(childDir)));
 }