写了如下几段代码执行后台线程并报告用户进展,但是效果不对?
  private void ImPortData_Click(object sender, EventArgs e)
        {  if (!bgwCalculator.IsBusy)
                bgwCalculator.RunWorkerAsync();
       }//-------------------------------------------------------------
 private void bgwCalculator_DoWork(object sender, DoWorkEventArgs e)
        {
            int completedCount = 0;
  
     completedCount++; 
 acceptService.ImportElementsDataByPrice(ElementsDataOnPrice);//耗时的后台数据操作
    bgwCalculator.ReportProgress(completedCount % 100);//报告进度        }
//-------------------------------------------------------
 private void bgwCalculator_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            tspbProgress.Value = e.ProgressPercentage;
        }
//--------------------------------------------------
  private void bgwCalculator_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
          {     tsslStatusText.Text = "接收数据成功";//线程完成
                tspbProgress.Value = 0;
               
            }
        }
现在的问题是进度条不动?程序可以执行完毕
 

解决方案 »

  1.   

    completedCount++; 
    这个语句只执行了一次,
    因为bgwCalculator_DoWork这个方法只执行了一次...
    建议
    1,使用循环滚动方式(适合无法预知耗时的操作)
    2,使用传统进度报告方式,但是进度比值要在耗时的操作里动态修改
      

  2.   

    acceptService.ImportElementsDataByPrice(ElementsDataOnPrice);//耗时的后台数据操作 
        bgwCalculator.ReportProgress(completedCount % 100);//报告进度 这里貌似有点问题,建议将bgwCalculator.ReportProgress(completedCount % 100);这句话写入耗时的后台数据操作的内部,用循环来写,否则的效果只是不动,因为completedCount 只是变化了一次
      

  3.   

    private void bgwCalculator_ProgressChanged(object sender, ProgressChangedEventArgs e) 
            { 
                tspbProgress.Value = e.ProgressPercentage; 
            } 
    ProgressChanged事件没有执行到,是要调用BackgroundWorkerReportProgress()才会触发,
    所以,你要在你后台的耕时操作中调用BackgroundWorker.ReportProgress()报告进度
      

  4.   

    且要设BackgroundWorker.WorkerReportsProgress = true;