写了如下几段代码执行后台线程并报告用户进展,但是效果不对?
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;
}
}
现在的问题是进度条不动?程序可以执行完毕
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;
}
}
现在的问题是进度条不动?程序可以执行完毕
这个语句只执行了一次,
因为bgwCalculator_DoWork这个方法只执行了一次...
建议
1,使用循环滚动方式(适合无法预知耗时的操作)
2,使用传统进度报告方式,但是进度比值要在耗时的操作里动态修改
bgwCalculator.ReportProgress(completedCount % 100);//报告进度 这里貌似有点问题,建议将bgwCalculator.ReportProgress(completedCount % 100);这句话写入耗时的后台数据操作的内部,用循环来写,否则的效果只是不动,因为completedCount 只是变化了一次
{
tspbProgress.Value = e.ProgressPercentage;
}
ProgressChanged事件没有执行到,是要调用BackgroundWorkerReportProgress()才会触发,
所以,你要在你后台的耕时操作中调用BackgroundWorker.ReportProgress()报告进度