C#来自后台工作者的Treeview更新

C#来自后台工作者的Treeview更新,c#,linq,treeview,backgroundworker,C#,Linq,Treeview,Backgroundworker,我正在清点档案。。。在后台扫描目录时,我必须通过ProgressChanged处理程序选择与我的TreeView中的目录名同名的对应节点 Treeview已使用具有指定根路径的所有子目录填充 MyProgressChanged事件将每15毫秒触发一次。。(这么快,不是吗) 所以,当我在那个处理程序中更新我的treeview时,我的窗口被冻结了,速度太慢了。。。甚至没有回应 问题: 如何在快速运行的ProgressChanged处理程序中更新UI 代码 var nodes = tv.Flatten

我正在清点档案。。。在后台扫描目录时,我必须通过
ProgressChanged
处理程序选择与我的
TreeView
中的目录名同名的对应节点

Treeview已使用具有指定根路径的所有子目录填充

My
ProgressChanged
事件将每15毫秒触发一次。。(这么快,不是吗)

所以,当我在那个处理程序中更新我的treeview时,我的窗口被冻结了,速度太慢了。。。甚至没有回应

问题:

如何在快速运行的
ProgressChanged
处理程序中更新UI

代码

var nodes = tv.FlattenTree()
            .Where(n => n.Text == new FileInfo(CurrentFilePath).Directory.Parent.Name)
            .ToList();
通过上面的代码,我正在选择节点

if (nodes.Count() > 0)
{
    nodes[0].ForeColor = Color.Blue;
    nodes[0].EnsureVisible();
}

通过上面的代码,我正在更新树视图

听起来这项任务正在以难以置信的速度更新,而且更新UI的成本相当高。你为什么不每十分钟更新一次?您还可以在填充TreeView时禁用绘制,因为在UI处于活动状态时在mass上添加节点会影响性能

不要更新那么快?以较低的间隔执行较大的更新。我也会删除
ensureavible
,因为当用户在看屏幕时,在屏幕上移动东西可能是不希望的。是的。。。。我必须计划一下-(是的..这是一个昂贵的仪式???是的..我可以暂停更新..让操作保持原样..我可以更新..每3秒一次..uuuhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh。。。