title: result isn't correct when use reportprogress
body: <p>I have listview with items add static and have text value sequence : 1,2,3,4,5,6
  when I select items so will have correspond backgroundworker thread perform</p>
  
  <p>e.g : I select 3 items so have 3 backgroundworker thread perform</p>
  
  <p>everything is ok until I add reportprogress of backgroundworker to dislay progressBar so result when select items is not correct</p>
  
  <p>e.g : I select 3 items with value text is 2,3,5 so result show is 2,2,5</p>
  
  <p>I try debugging but can't find error</p>
  
  <p>somebody help me, please!!!!</p>
  
  <pre><code>private static int numOfTheards = 0;
  BackgroundWorker[] threadArray;
  List&lt;string&gt; lst = null;
  int i ;
  
  
  private void InitializeBackgoundWorkers()
  {
  
      for (int f = 0; f &lt; numOfTheards; f++)
      {
          threadArray[f] = new BackgroundWorker();
          threadArray[f].DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
          threadArray[f].RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
          threadArray[f].ProgressChanged +=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
          threadArray[f].WorkerReportsProgress = true;
          threadArray[f].WorkerSupportsCancellation = true;
      }
  }
  
  
  
  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  {           
      string kq = "";
      while (i &lt; lst.Count)
      {
          kq = lst[i];
          (sender as BackgroundWorker).ReportProgress(i * 100 / listViewEx1.Items.Count);
          ++i;
          break;
      }
      labelX1.Invoke(new MethodInvoker(delegate { labelX1.Text += kq + "-"; }));    
  }
  
  
  
  
  private void buttonX1_Click(object sender, EventArgs e)
  {
      i = 0;
      labelX1.Text = "";
      InitializeBackgoundWorkers();
      for (int a = 0; a &lt; numOfTheards; a++)
      {
          if (threadArray[a].IsBusy)
          {
              threadArray[a].CancelAsync();
          }
          else
          {
              progressBarX1.Value = progressBarX1.Minimum;
              threadArray[a].RunWorkerAsync();
          }
      }
  }
  
  
  
  private void listViewEx1_SelectedIndexChanged(object sender, EventArgs e)
  {
      labelX2.Text = "";
      numOfTheards = listViewEx1.SelectedItems.Count;
      threadArray = new BackgroundWorker[numOfTheards];
  
      lst = new List&lt;string&gt;();
      foreach (ListViewItem item in listViewEx1.SelectedItems)
      {
          lst.Add(item.SubItems[0].Text);
          labelX2.Text += item.SubItems[0].Text+".";
      }
  }
  
  private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  {
      progressBarX1.Value = e.ProgressPercentage;
      progressBarX1.Text = "Processing......" + progressBarX1.Value.ToString() + "%";
  }
  </code></pre>