我有这个两个方法如何从递归方法返回,然后从最后返回的点继续递归方法?
private List<DirectoryInfo> GetDirectories(string basePath)
{
IEnumerable<string> str = MyGetDirectories(basePath);
List<DirectoryInfo> l = new List<DirectoryInfo>();
l.Add(new DirectoryInfo(basePath));
IEnumerable<DirectoryInfo> dirs = str.Select(a => new DirectoryInfo(a));
l.AddRange(dirs);
return l;
}
而且
static int countDirectories = 0;
private IEnumerable<string> MyGetDirectories(string basePath)
{
try
{
string[] dirs = Directory.GetDirectories(basePath);
if (dirs.Length > 0)
return dirs.Union(dirs);
countDirectories = countDirectories + dirs.Length;
_FileInformationWorker.ReportProgress(countDirectories,dirs);
return dirs.Union(dirs.SelectMany(dir => MyGetDirectories(dir)));
}
catch (UnauthorizedAccessException)
{
return Enumerable.Empty<string>();
}
}
而且在一个BackgroundWorker的DoWork这
private void _FileInformationWorker_DoWork(object sender, DoWorkEventArgs e)
{
MySubDirectories = GetDirectories(BasePath).ToArray();
}
而不是等待方法MyGetDirectories来完成我想在DoWork的更新事件变量MySubDirectories每次变量dirs。更改。在这种情况下,第一次目录长度是36,所以我做回报,我看到MySubDirectories包含36项。现在的问题是方法MyGetdirectories中的递归不会继续。我希望它继续下一次dirs长度大于0,例如下一次它将是3,然后更新MySubDirectories,所以现在MySubDirectories将包含在dirs中的新3项。
我不想停止递归我只是想实时更新MySubDirectories。
我试过到目前为止并没有在方法MyGetdirectories我也是报告显示目录变量:在progresschanged事件
_FileInformationWorker.ReportProgress(countDirectories, dirs);
然后做:
List<string[]> testing = new List<string[]>();
private void _FileInformationWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label2.Text = e.ProgressPercentage.ToString();
string[] test = (string[])e.UserState;
if (test.Length > 0)
testing.Add(test);
}
但我现在m以string []数组的列表结尾。和测试是字符串[] 有什么办法将字符串[]转换/转换为DirectoryInfo []?