ファイルエクスプローラーを自作してみたい。すべてのドライブのすべてのディレクトリを列挙するアルゴリズムがあります。しかし、それはあまりにもゆっくりと実行されます。これが私のコードです:
public ExplorerForm()
{
InitializeComponent();
this.SuspendLayout();//Without this, it will be far more slow again!
string[] a = System.IO.Directory.GetLogicalDrives();// a is used for drive array
for(int b = 0; b < a.Length; b++)//B is an enumerator. Ussually it is only one letter
{
//Defining the node
TreeNode c = new TreeNode();//c i place for TreeNode
c.Text = a[b].Substring(0,2);
c.Tag = a[b];
ApplyNodes(a[b], ref c);
if(c != null) tv.Nodes.Add(a)
}
this.ResumeLayout(false);
}
private void ApplyNodes(string a, ref TreeNode b)//a=directory, b applied TreeNode
{
try{
List<string> c = new List<string>(Directory.EnumerateDirectories(a);//c = directories
if (c.Count == 0 ) return;
for(int d = 0; d < c.Count; d++)//d = enumerator.
{
TreeNode e = new TreeNode();//e = TreeNode
var z = c[b].Split(Convert.ToChar("/"));
e.Text = z[z.Length-1]
e.Tag = c[b];
ApplyNodes(c[b], e)
if(e != null) b.Nodes.Add(e)
}
}catch (UnauthorizedAccessException){
}catch (IOException){ //For test, It is removed. and my E: is not ready
}
}
テレビは私のコントロールです。非常にゆっくりと実行されます。選択した行を削除すると表示され、IOException がスローされるまでに 10 秒以上かかります。列挙を改善する方法を教えてください。これは、スレッドと部分更新を使用する場合を除きます。後で修正できない場合は、理由を教えてください。