计算的进度百分比未更新

时间:2016-11-27 14:06:09

标签: c# backgroundworker

我正在尝试使用标签中的后台工作人员显示进度的百分比值。我添加Aprox。 25 K行到DataTable。当我将Label.Text设置为e.ProgressPercentage时,它工作正常。但是当我计算%值时,它仍然是相同的。只有在完成工作后标签更新为100%

                progressCount = report.Rows.Count;
                foreach (DataRow r in report.Rows)
                {

                        rp.pName = r[1].ToString();
                        rp.batch = r[2].ToString();
                        rp.expr = r[3].ToString();
                        rp.stock = r[5].ToString();
                        rp.rate = r[6].ToString();
                        backgroundWorker2.ReportProgress(i, rp);
                        System.Threading.Thread.Sleep(2);
                        if(backgroundWorker2.CancellationPending)
                        {
                            e.Cancel = true;
                            backgroundWorker2.ReportProgress(0);
                        }
                        i++;

                }



private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        metroProgressBar1.Minimum = 0;
        metroProgressBar1.Maximum = progressCount;
         stock st = new stock();
        reportClass rp = (reportClass)e.UserState;
        if(!backgroundWorker2.CancellationPending)
        {
            st.stockReport.Rows.Add(rp.pName, rp.batch, rp.expr, rp.stock, rp.rate);
            metroProgressBar1.Value = e.ProgressPercentage;
            int percn = (e.ProgressPercentage / progressCount) * 100;
            metroLabel4.Text =percn.ToString();
        }
    }

1 个答案:

答案 0 :(得分:4)

您最有可能将整数除以整数,结果为零。首先将值转换为double,进行计算,然后将结果转换回int。

变化:

int percn = (e.ProgressPercentage / progressCount) * 100;

要:

int percn = (int)(((double)e.ProgressPercentage / (double)progressCount) * 100);