0

ディレクトリを再帰してツリーを構築するメソッドがあります。

public void RecurseFolders(TreeNode mainNode) {
  DirectoryInfo nodeDir = new DirectoryInfo(mainNode.Tag.ToString());
  try {
    foreach (var dir in nodeDir.GetDirectories()) {
      int index = GetSystemIcon(dir.FullName, treeView1.ImageList, false);
      var subNode = new TreeNode(dir.Name, index, index);
      subNode.Tag = dir.FullName;
      mainNode.Nodes.Add(subNode);
      RecurseFolders(subNode);
    }
  } catch (UnauthorizedAccessException err) {
    Console.WriteLine(err);
  }
}

これでやりたいことは、そこからParallel.ForEachを記述する方法を見つけることですが、私の LINQ の知識はあまりにも未熟です。

明らかにTreeNode、スレッドに を渡すことはできないため、署名をより一般的なものに変更しました。これは私が得た限りです:

public string[] RecurseFolders(string dirString) {
  List<string> list = new List<string>();
  DirectoryInfo nodeDir = new DirectoryInfo(dirString);
  Parallel.ForEach(nodeDir.GetDirectories(), dir => {
    // how do I write this?
  });
  return list.ToArray();
}

どうやって終わらせるの?

編集:

これは、ネットワーク ストレージ ドライブからディレクトリとファイルのリストを取得しています。現在、ネットワークを介して情報を取得することがボトルネックになっていますが、並列処理のテクニックを学ぶには良い場所です。

4

1 に答える 1

0

しかし、あなたはすでにそれをしました!

    public string[] RecurseFolders(string dirString) {
      List<string> list = new List<string>();
      DirectoryInfo nodeDir = new DirectoryInfo(dirString);
      Parallel.ForEach(nodeDir.GetDirectories(), dir => {
//Just continue writing here. This is an Action. Google it for more info. But for the purposes of this example you may consider it as method which will be called for each of the items
      });
      return list.ToArray();
    }
于 2012-06-30T04:12:18.177 に答える