C# 异步方法调用为.net C加载Treeview#
我在这个网站上读了很多回复,浏览了微软的文档和一些Youtube视频。但我仍然不知道异步方法是如何工作的。在大多数示例中,它们返回int或其他值。但我不想这样使用它们。我有一个树状视图,正在将Windows资源管理器的内容加载到其中。这是一个缓慢的过程,我已经实现了一种“即时”加载,但加载仍然需要很长时间 我用TopNode(我的电脑)初始化树,然后在下面添加驱动器。然后是驱动器号下方的第一级文件夹,例如Windows、用户、程序文件等。如果用户单击每个文件夹,则仅为其添加其余子文件夹。这是为了加快Treeview的加载速度。但是,对于一些较大的文件夹来说,这仍然很慢 我要做的是同时处理驱动器下的每个文件夹。以减少用户等待时间。 这是我的密码C# 异步方法调用为.net C加载Treeview#,c#,.net,asynchronous,treeview,C#,.net,Asynchronous,Treeview,我在这个网站上读了很多回复,浏览了微软的文档和一些Youtube视频。但我仍然不知道异步方法是如何工作的。在大多数示例中,它们返回int或其他值。但我不想这样使用它们。我有一个树状视图,正在将Windows资源管理器的内容加载到其中。这是一个缓慢的过程,我已经实现了一种“即时”加载,但加载仍然需要很长时间 我用TopNode(我的电脑)初始化树,然后在下面添加驱动器。然后是驱动器号下方的第一级文件夹,例如Windows、用户、程序文件等。如果用户单击每个文件夹,则仅为其添加其余子文件夹。这是为了
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的观点,我实际上是在谈论并行处理。当仍在创建节点时,显示树视图没有意义。所以我不在乎屏幕是否在等待。我只是想尽快处理。