我有這個兩個方法如何從遞歸方法返回,然後從最後返回的點繼續遞歸方法?
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 []?