我写了一个类似资源管理器的一棵树,发现速度有点慢。我想启动多线程来初始化树。int nCount=CurrentNode.Nodes.Count;
Number=nCount;
CurrentExpandNode=CurrentNode;
IfSpecial=Special;
Thread  FindFile1=new Thread(new ThreadStart(ThreadFindFile1));
Thread  FindFile2=new Thread(new ThreadStart(ThreadFindFile2));
FindFile1.Start();
FindFile2.Start();
每一个线程初始化一半
public void ThreadFindFile1()
{
try
{
int j=0;
string FullPath;
int nCount=Number/2;

for(int i=0;i<nCount;i++)
{   
FullPath=GetFullPath(CurrentExpandNode.Nodes[i],IfSpecial);
                   
System.IO.DirectoryInfo DirInfo=new System.IO.DirectoryInfo(FullPath);
if(DirInfo.Exists)
{   
if(CurrentExpandNode.Nodes[i].Nodes.Count!=0)
{
return;
}

string[] strEntries=System.IO.Directory.GetFileSystemEntries(FullPath);
foreach(string str in strEntries)
{
DirInfo=new System.IO.DirectoryInfo(str);
string strDirs=str;
int index=strDirs.LastIndexOf(@"\");
strDirs=strDirs.Remove(0,index+1);
if(DirInfo.Exists)
{   
if(( DirInfo.Attributes&System.IO.FileAttributes.Hidden)==0)
{
CurrentExpandNode.Nodes[i].Nodes.Add(strDirs);
if(IfSpecial)
{
CurrentExpandNode.Nodes[i].Nodes[j].Tag="Special";
} CurrentExpandNode.Nodes[i].Nodes[j].ImageIndex=1;
CurrentExpandNode.Nodes[i].Nodes[j].SelectedImageIndex=1;
j++;
}
}
else
{  
System.IO.FileInfo fileinfo = new System.IO.FileInfo(str);
if((fileinfo.Attributes&System.IO.FileAttributes.Hidden)==0)
{
CurrentExpandNode.Nodes[i].Nodes.Add(strDirs);
if(IfSpecial)
{
CurrentExpandNode.Nodes[i].Nodes[j].Tag="Special";
}
int n=_iconListManager.AddFileIcon(str);
CurrentExpandNode.Nodes[i].Nodes[j].ImageIndex=n;
CurrentExpandNode.Nodes[i].Nodes[j].SelectedImageIndex=n;
j++;
}
}
}
j=0;

}
else
{

}

}


}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void ThreadFindFile2()
{
try
{
int j=0;
string FullPath;
int nCount=Number/2;
nCount=Number-nCount;

for(int i=nCount;i<Number;i++)
{   
FullPath=GetFullPath(CurrentExpandNode.Nodes[i],IfSpecial);
                   
System.IO.DirectoryInfo DirInfo=new System.IO.DirectoryInfo(FullPath);
if(DirInfo.Exists)
{   
if(CurrentExpandNode.Nodes[i].Nodes.Count!=0)
{
return;
}

string[] strEntries=System.IO.Directory.GetFileSystemEntries(FullPath);
foreach(string str in strEntries)
{
DirInfo=new System.IO.DirectoryInfo(str);
string strDirs=str;
int index=strDirs.LastIndexOf(@"\");
strDirs=strDirs.Remove(0,index+1);
if(DirInfo.Exists)
{   
if(( DirInfo.Attributes&System.IO.FileAttributes.Hidden)==0)
{
CurrentExpandNode.Nodes[i].Nodes.Add(strDirs);
if(IfSpecial)
{
CurrentExpandNode.Nodes[i].Nodes[j].Tag="Special";
} CurrentExpandNode.Nodes[i].Nodes[j].ImageIndex=1;
CurrentExpandNode.Nodes[i].Nodes[j].SelectedImageIndex=1;
j++;
}
}
else
{  
System.IO.FileInfo fileinfo = new System.IO.FileInfo(str);
if((fileinfo.Attributes&System.IO.FileAttributes.Hidden)==0)
{
CurrentExpandNode.Nodes[i].Nodes.Add(strDirs);
if(IfSpecial)
{
CurrentExpandNode.Nodes[i].Nodes[j].Tag="Special";
}
int n=_iconListManager.AddFileIcon(str);
CurrentExpandNode.Nodes[i].Nodes[j].ImageIndex=n;
CurrentExpandNode.Nodes[i].Nodes[j].SelectedImageIndex=n;
j++;
}
}
}
j=0;

}
else
{

}


}


}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

结果提示错误,必须使用Control.Invoke或Control.BeginInvoke封送到正确的线程才能执行此操作。请问怎么处理。
这样写对吗?有没有更好的方法