【发布时间】:2010-01-26 06:28:05
【问题描述】:
我已经构建了一个树视图控件,它列出了任何驱动器或文件夹的目录结构。但是,如果您选择一个驱动器或具有大量文件夹和子文件夹结构的东西,则该控件需要很长时间才能加载,并且在某些情况下会显示 MDA ContextSwitchDeadlock 消息。我已经禁用了 MDA 死锁错误消息并且它可以工作,但我不喜欢时间因素和应用程序看起来像它已锁定。如何修改代码以使其不断发送消息,而不是缓冲整个视图并将其全部传递给控件,有没有办法在构建时将其推送到控件?
//Call line
treeView1.Nodes.Add(TraverseDirectory(source_computer_fldbrowser.SelectedPath));
private TreeNode TraverseDirectory(string path)
{
TreeNode result;
try
{
string[] subdirs = Directory.GetDirectories(path);
result = new TreeNode(path);
foreach (string subdir in subdirs)
{
TreeNode child = TraverseDirectory(subdir);
if (child != null) { result.Nodes.Add(child); }
}
return result;
}
catch (UnauthorizedAccessException)
{
// ignore dir
result = null;
}
return result;
}
谢谢R。
【问题讨论】:
-
不要这样做,甚至不使用线程。一个大的驱动器很容易需要一分钟。 Alex 向您展示了 Windows 是如何做到这一点的,当用户展开一个节点时替换一个虚拟子节点,因此您只需要读取一个目录。
标签: c# visual-studio-2008 treeview controls