计算的进度百分比未更新

mof*_*dul 1 c# backgroundworker

我正在尝试显示标签中后台工作人员的进度百分比值。我正在添加 Aprox。数据表 25 K 行。当我仅将 Label.Text 设置为 e.ProgressPercentage 时,它​​工作正常。但是当我计算%值时,它保持不变。只有在worker完成后标签才更新为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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Idl*_*ind 5

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

改变:

int percn = (e.ProgressPercentage / progressCount) * 100;
Run Code Online (Sandbox Code Playgroud)

到:

int percn = (int)(((double)e.ProgressPercentage / (double)progressCount) * 100);
Run Code Online (Sandbox Code Playgroud)