首页 > 解决方案 > 为 .net C# 加载 Treeview 的异步方法调用

问题描述

我已经阅读了该网站上的许多回复,并查看了 Microsoft 文档和一些 Youtube 视频。但我仍然不明白异步方法是如何工作的。在大多数示例中,它们返回一个 int 或其他东西。但这不是我想要使用它们的方式。我有一个 Treeview,我正在将 Windows Explorer 的内容加载到其中。这是一个缓慢的过程,我已经实现了一种“及时”加载,但加载仍然需要很长时间。

我用 TopNode (My PC) 初始化树,然后在下面添加 Drives。然后是驱动器号下方的第一级文件夹,例如 Windows 、用户、程序文件等。其余的子文件夹只有在用户单击时才会为每个文件夹添加。这是为了加快 Treeview 的加载速度。但是,对于一些较大的文件夹,这仍然会变慢。

我想要做的是同时处理驱动器下的每个文件夹。减少用户等待时间。这是我的代码;

public static async void InitializeTreeView()
..
..
..
            foreach (DriveInfo d in MyDrives)
            {
                CustNode c = new CustNode();
                c.Name = d.Name;
                c.Text = d.Name;
                c.SelectedImageIndex = 3;
                c.ImageIndex = 3;
                c.NodeType = "Drive";
                Tview.TopNode.Nodes.Add(c);
                Tview.HideCheckBox(c);
                AddNodeToTree(c, c.Name, TreeViewDepth);
            }

AddNodeToTree 包含一个递归子文件夹调用,该调用使用文件夹名称深入了解所有子文件夹和文件。

我不想等待这个完成,我想同时为每个文件夹运行 foreach 语句以加快进程。

我怎样才能做到这一点 ?

埃里克

标签: c#.netasynchronoustreeview

解决方案


并行与否,如果操作涉及 I/O,则不应使用并行处理。因为默认情况下必须将任何 I/O 操作视为阻塞。

因此,任何涉及 I/O 的进程都最好异步完成。

C# async 使用偏好的完整解释记录在:C# async-await 的官方文档


推荐阅读