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);
        }