我是Stackflow和C#的新手!
下面的代码可以将字符串列表加载到treeview控件中,它的工作效果很好。唯一的问题是速度。当列表很大时,加载需要时间,这并不是问题,但它会锁定UI一段时间。
例如,像这样的字符串列表(但要大得多):
c:\drivers\test1.txt
c:\drivers\test2.txt
c:\drivers\folder\test1.txt
c:\brother\tester\text1.zip
c:\brother\another\text2.zip
c:\data\company1\accounts.rar
c:\data\company2\accounts.rar
treeview使用反斜杠标记分割字符串,并将它们整齐地放在资源管理器视图中 - 这很好!
tvRestore是示例中的Treeview控件。
foreach (string path in lstKeys)
{
lastNode = null;
subPathAgg = string.Empty;
foreach (string subPath in path.Split(new string[] { "\\" }, StringSplitOptions.None))
{
foreach (string item in subPath.Split(new string[] { "\\" }, StringSplitOptions.None))
{
if (item == "" || item == null)
{
continue;
}
subPathAgg += item + "\\";
TreeNode[] n = tvRestore.Nodes.Find(subPathAgg, true);
if (n.Length > 0)
{
lastNode = n[0];
continue;
}
else
{
// lastNode = null;
}
TreeNode[] nodes = tvRestore.Nodes.Find(subPathAgg, true);
if (nodes.Length == 0)
if (lastNode == null)
lastNode = tvRestore.Nodes.Add(subPathAgg, item);
else
lastNode = lastNode.Nodes.Add(subPathAgg, item);
else
lastNode = nodes[0];
}
}
}
唯一的问题就是速度。我尝试使用线程,但代码会因为控件在不同线程上而出现异常。我相信我必须调用Nodes.Add方法,但我不知道如何做到这一点。
理想情况下,代码将在应用程序启动时开始填充树形视图,虽然我不希望应用程序因较大列表而锁定30-40秒或更长时间。
如何加快这个过程的最佳方法是什么?
treeView1.BeginUpdate();
关闭绘图,然后使用EndUpdate();
再次打开。 - LarsTech