这里是完整的源代码: http: //pastebin.com/mLaGwwi0 正如你会注意到的,事情是扫描目录和文件并在树视图中填充它们。我正在使用后台工作者(Threads 类也是如此)在后台执行此操作,同时使用节点一一更新树视图。问题是它不在后台工作,也没有更新树视图。这是悬挂表单的代码部分:
public void ListDirectory(DirectoryInfo path)
{
treeView1.Nodes.Add(CreateDirectoryNode(path));
}
public void Addnode(DirectoryInfo dirinfo)
{
Invoke(new AddCDAnode(ListDirectory), new object[] { dirinfo });
}
private TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeNode(directoryInfo.Name);
foreach (var directory in directoryInfo.GetDirectories())
{
//Statustext = directory.FullName;
directoryNode.Nodes.Add(CreateDirectoryNode(directory));
}
foreach (var file in directoryInfo.GetFiles())
directoryNode.Nodes.Add(new TreeNode(file.Name));
return directoryNode;
}
public delegate void AddCDAnode(DirectoryInfo dirinfo);
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
DirectoryInfo dir = new DirectoryInfo(@"\\server\trabajos 2013\");
Addnode(dir);
}
private void Form1_Load(object sender, EventArgs e)
{
//Start filling the TreeView on a separate thread
backgroundWorker1.RunWorkerAsync();
}
在完整的源代码中,您将看到注释代码 - 来自示例并在后台运行,没有任何麻烦。所以我认为问题出在我的扫描目录代码上。
该解决方案也可在此处获得,如果您想下载它。