Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步方法调用为.net C加载Treeview#_C#_.net_Asynchronous_Treeview - Fatal编程技术网

C# 异步方法调用为.net C加载Treeview#

C# 异步方法调用为.net C加载Treeview#,c#,.net,asynchronous,treeview,C#,.net,Asynchronous,Treeview,我在这个网站上读了很多回复,浏览了微软的文档和一些Youtube视频。但我仍然不知道异步方法是如何工作的。在大多数示例中,它们返回int或其他值。但我不想这样使用它们。我有一个树状视图,正在将Windows资源管理器的内容加载到其中。这是一个缓慢的过程,我已经实现了一种“即时”加载,但加载仍然需要很长时间 我用TopNode(我的电脑)初始化树,然后在下面添加驱动器。然后是驱动器号下方的第一级文件夹,例如Windows、用户、程序文件等。如果用户单击每个文件夹,则仅为其添加其余子文件夹。这是为了

我在这个网站上读了很多回复,浏览了微软的文档和一些Youtube视频。但我仍然不知道异步方法是如何工作的。在大多数示例中,它们返回int或其他值。但我不想这样使用它们。我有一个树状视图,正在将Windows资源管理器的内容加载到其中。这是一个缓慢的过程,我已经实现了一种“即时”加载,但加载仍然需要很长时间

我用TopNode(我的电脑)初始化树,然后在下面添加驱动器。然后是驱动器号下方的第一级文件夹,例如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语句,以加快进程,而不是等待它完成

我该怎么做


Erick

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

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


C#async用法偏好的完整解释记录在:

有一个简单的规则:当你说async时,你也必须说wait。没有任何等待,异步是无用的SBTW异步/等待的主要原因是减少阻塞。这可能需要更长的时间,但体验更流畅:o)我认为这个问题更多地与并行处理有关,而不是与异步有关。我同意Theodor的观点,我实际上是在谈论并行处理。当仍在创建节点时,显示树视图没有意义。所以我不在乎屏幕是否在等待。我只是想尽快处理。