title: Background Worker with progress bar
body: <p>I am trying to get a <code>ProgressBar</code> with the progress of a dataset being converted to Excel using the <code>BackgroundWorker</code>. The problem is that the work is being done in a different class than the <code>ProgressBar</code> and I am having difficulty calling <code>worker.ReportProgress(...)</code> from within my loop. I am sorry if this is a easy thing but I am new to C# and have been trying this the whole day and just can't seem to get it right. Your help would be HIGHLY appreciated.</p>
  
  <pre><code>namespace CLT
  {
      public partial class GenBulkReceipts : UserControl
      {
          private void btnOpen_Click(object sender, EventArgs e)
          {
              Cursor.Current = Cursors.WaitCursor;
              try
              {
                  OpenFile();
              }
  
              Cursor.Current = Cursors.Default;
          }
          private void OpenFile()
  
          {
              if (dsEx1.Tables[0].Rows.Count &gt; 0)
              {
                    backgroundWorker1.RunWorkerAsync(dsEx1);
              }
          }
  
          public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
          {
              BackgroundWorker worker = sender as BackgroundWorker;
              DataSet ImportDataSet = e.Argument as DataSet;
              AccountsToBeImported = new BLLService().Get_AccountsToBeReceipted(ImportDataSet);
          }
  
          public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
          {
              this.progressBar1.Value = e.ProgressPercentage;
          }
  
          // ...
      }
  }
  
  namespace BLL
  {
      class GenBulkReceiptsBLL
      {
          public DataSet Get_AccountsToBeReceipted(DataSet dsImport)
          {
              DataSet dsReturn = AccountsDAL.QGenReceiptAccounts(0,0,"");//Kry Skoon DataSet wat ge-populate moet word
  
              CLT.GenBulkReceipts pb = new CLT.GenBulkReceipts();
              int TotalRows = dsImport.Tables[0].Rows.Count;
              //pb.LoadProgressBar(TotalRows);
              int calc = 1;
              int ProgressPercentage;
  
              foreach (DataRow dr in dsImport.Tables[0].Rows)
              {
                 ProgressPercentage = (calc / TotalRows) * 100;
  
                  //This is the problem as I need to let my Progressbar progress here but I am not sure how
                  //pb.worker.ReportProgress(ProgressPercentage);
              }
  
              return dsReturn;
          }
  
          // ...
      }
  }
  </code></pre>