続き

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
 for(int i = 0; i < 23877; i++)
 {
  if(this.backgroundWorker1.CancellationPending)
  {
   e.Cancel = true;
   return;
  }
  
  //System.Threading.Thread.Sleep(20); ←最低でも20msSleepしないと描画されなかったり、キャンセルできなかったり
  backgroundWorker1.ReportProgress(i, i);
 }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
 textbox1.AppendText("line: " + e.UserState.ToString());
}