我运行了这段代码并将新的TreeView对象分配给treeFolders TreeView表单对象:
WM_SIZE
我很高兴,因为代码不会阻止UI,它会递归并递归目录并构建一个TreeView对象。问题是我的表单上的treeFolders TreeView对象即使在运行此代码后仍然为空。如果我在中断模式下检查treeFolders对象,我可以看到它确实有文件和目录的节点,所以我无法理解为什么它不显示它们。是否与TreeView是在对UI线程的不同威胁上创建的事实有关?这是ListDirectory似乎工作正常并加载所有必需的目录和文件
private async void butLoad_Click(object sender, EventArgs e)
{
Task<TreeView> task = Task.Run(() => DirectoryTree.ListDirectory("C:\\"));
this.treeFolders = await task;
}
答案 0 :(得分:1)
您正在使用Task.Run
调用顶级方法调用,在非UI线程中执行操作的完整。但是您需要与UI交互的代码在UI线程中运行,而不是非UI线程。
您应该在非UI线程中执行仅长时间运行的非UI操作,而不是在非UI线程中执行所有操作。所以这意味着只需在调用GetFiles
内调用GetDirectories
和Task.Run
,剩下的代码(这是你的UI代码)就可以在UI线程中运行。