private void TesterFileEnumerator(String path, MatchReason reason, WorkerData data)
{
if (data.worker.CancellationPending)
{
throw new CancelException();
}
// first look into directories
String[] dirs = Directory.GetDirectories(path);
foreach (String dir in dirs)
{
if (data.worker.CancellationPending)
{
throw new CancelException();
}
string filename = ChopFilename(dir, data.len);
// optimization, directory must pass global exclude filters
// this is here mainly to not traverse .svn subdirectories
reason.Reset();
if (data.model.PassesGlobalFilters(filename, reason))
{
TesterFileEnumerator(dir, reason, data);
}
else
{
data.worker.ReportProgress(0, new ReportInfo(filename, dir, reason));
}
Thread.Sleep(10); // don't hung the UI thread
}
String[] files = Directory.GetFiles(path);
// next look for files
foreach (String file in files)
{
if (data.worker.CancellationPending)
{
throw new CancelException();
}
string filename = ChopFilename(file, data.len);
reason.Reset();
lock (data.folder)
{
try
{
if (data.folder.PassesFilters(filename, reason))
{
data.worker.ReportProgress(0, new ReportInfo(filename, file, reason));
}
else
{
data.worker.ReportProgress(0, new ReportInfo(filename, file, reason));
}
}
catch (Exception)
{
// hack
}
}
Thread.Sleep(10); // don't hung the UI thread
}
}