private void timer1_Tick(object sender, EventArgs e) { lock (timer1) { if (resultQueue != null) { foreach (ResultItem item in resultQueue) { ListViewItem listItem = new ListViewItem(); listItem.Text = item.filename; DeltaInfo deltaInfo = DeltaInfo.Construct(item.before, item.after); if (deltaInfo != null) { if (deltaInfo.EndPosBefore - deltaInfo.StartPos > 0 && deltaInfo.EndPosAfter - deltaInfo.StartPos > 0) { listItem.SubItems.Add(item.before.Substring(deltaInfo.StartPos, deltaInfo.EndPosBefore - deltaInfo.StartPos).Trim()); listItem.SubItems.Add(item.after.Substring(deltaInfo.StartPos, deltaInfo.EndPosAfter - deltaInfo.StartPos).Trim()); occurrences += this.countDeltas(item.before, item.after); } else { listItem.Text = "ERROR" + listItem.Text; } Result.Items.Add(listItem); } } } resultQueue = null; } if (endSignalReceived) { StatusText.Text = "Done"; Go.Text = "Go"; timer1.Stop(); } else { if (currentlyScanning != "") { StatusText.Text = currentlyScanning.Substring(Path.Text.Length); } else { StatusText.Text = "Preparing..."; } } ProgressText.Text = String.Format("{0} scanned; {1} found in {2} files. ", scanned, occurrences, Result.Items.Count); }
private int countDeltas(string before, string after) { DeltaInfo deltaInfo = DeltaInfo.Construct(before, after); int deltas = 0; while (deltaInfo != null && deltaInfo.StartPos != deltaInfo.EndPosAfter && deltaInfo.StartPos != deltaInfo.EndPosBefore) { deltas++; before = before.Remove(deltaInfo.StartPos, deltaInfo.EndPosBefore - deltaInfo.StartPos); after = after.Remove(deltaInfo.StartPos, deltaInfo.EndPosAfter - deltaInfo.StartPos); deltaInfo = DeltaInfo.Construct(before, after); } return(deltas); }