public void Execute() { var options = Options as SearchOptions; try { Parallel.For(0, Stats.TotalFiles, fileIndex => { { var filename = Files[fileIndex]; var sourceLines = File.ReadAllLines(filename); string filenameExt = Path.GetExtension(filename).ToLower(); Stats.FoundFiles++; var foundInFile = FileFilter.Match(options, filename, filenameExt); for (var lineNo = 0; lineNo < sourceLines.Length; lineNo++) { var line = sourceLines[lineNo]; var lines = LineFilter.Match(options, Files[fileIndex], filenameExt, sourceLines, sourceLines[lineNo] + " ", lineNo); if (lines.Count() > 0 && foundInFile) { foreach (var processedLine in lines) { foundLines.Add(processedLine); } } } } }); } finally { foundLines.CompleteAdding(); } var result = foundLines.GetConsumingEnumerable().ToList(); if (result.Any()) { ProcessHtmlOutput(Options as SearchOptions, result); ProcessConsoleOutput(Options as SearchOptions, result); ProcessFileUpdateRelatedDirectives(Options as SearchOptions, result); } }