【发布时间】:2023-03-24 04:06:01
【问题描述】:
我正在制作一个媒体统计应用程序,它有一个TreeView 控件,其中所有媒体文件都作为项目。填充它需要几秒钟,我认为必须有另一种方法来在任何滚动条位置显示项目而不会花费太多时间。
禁止从创建它们的线程(UI 线程)以外的线程访问控件,因此它要么是具有明显冻结的常用方法,要么是我想不出的其他方式。
如何使用许多项目填充 TreeView 控件而不会使 UI 线程长时间停滞?
【问题讨论】:
-
如果真的有那么个项目,你确定要将它们都放在一个
ListBox吗?足够多会导致渲染问题往往与足够多会导致糟糕的用户体验相吻合。 -
虽然没有渲染问题。填充只需大约 30 秒,然后一切顺利且无泪。
-
重点是,作为用户,尝试搜索 项通常很麻烦。通常值得寻找一种过滤列表的方法,可能通过某种形式的级联字段(选择一个可以过滤此处显示的内容的类别)或通过某种形式的分页。并不是您必须这样做,只是这可能比尝试在列表框中找到第 7,346 个项目更好。
-
实际上,更好的主意是使用 ListView 或其他允许树视图的东西,但该控件需要更多时间来填充。在这种情况下,我真的应该询问 ListView,但我仍然不确定这是否是要使用的控件。
-
假设您一次加载所有内容。不要那样做。仅加载他们可以看到的内容,然后在每个项目展开时,动态填充下一个级别。当 那个 级别被扩展时,向下扩展一个级别,等等。实际上代码有点复杂,但它创造了更好的用户体验。在不冻结 UI 的情况下填充列表框当然是可能的,而且实际上相当容易,但我只是想确定你真的想要这样做。