C# 报告Directory.GetFiles的进度

C# 报告Directory.GetFiles的进度,c#,.net-4.0,C#,.net 4.0,是否有一种快速方法可以将从提供的根目录开始的每个文件(您具有读取权限)的完全限定路径加载到字符串[] 我看到了System.IO.Directory.GetFiles,但是在允许输入搜索选项之前,您必须提供一个过滤器。AllDirectories,因此我尝试: string[] directoryList = Directory.GetFiles(RootPath, "*.*", SearchOption.A

是否有一种快速方法可以将从提供的根目录开始的每个文件(您具有读取权限)的完全限定路径加载到
字符串[]

我看到了
System.IO.Directory.GetFiles
,但是在允许输入
搜索选项之前,您必须提供一个过滤器。AllDirectories
,因此我尝试:

string[] directoryList = Directory.GetFiles(RootPath, "*.*",
                                            SearchOption.AllDirectories);
其中
RootPath
是我的有效根目录。这似乎还可以,只是当它指向一个29GB的大目录/文件结构和几十万个文件时,我的windows窗体应用程序挂起了很长时间


所以我想通过一个
BackgroundWorker
来线程化它,这样我的GUI就不会被锁定,但是我不确定如何为
ProgressBar
报告这样的进度,因为它只是一个执行加载的语句,我没有关于前面文件总数的信息,或者它已经处理的数字等。

使用
目录.GetFiles
,您将始终阻止,直到所有结果都被完全处理,这在大型目录结构上可能需要很长时间

您可以使用而不是
Directory.GetFiles
。这将以
IEnumerable
而不是数组的形式返回结果,因此您可以立即开始处理(或报告进度)结果

否则,最好的选择是使用
Directory.GetFiles
,而不是
SearchOption.AllDirectories
。然后,您可以使用自己处理递归,并分阶段解析结果