C# 计算的进度百分比未更新

C# 计算的进度百分比未更新,c#,backgroundworker,C#,Backgroundworker,我试图在标签中显示背景工作者的进度百分比值。我正在添加一个Aprox。数据表中有25K行。当我将Label.Text设置为e.ProgressPercentage时,它可以正常工作。但当我计算%值时,它保持不变。只有在工人完成后,标签才会更新为100% progressCount = report.Rows.Count; foreach (DataRow r in report.Rows) {

我试图在标签中显示背景工作者的进度百分比值。我正在添加一个Aprox。数据表中有25K行。当我将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();
        }
    }

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

更改:

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


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

更改:

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


您可能没有注册事件:backgroundWorker2.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker2\u ProgressChanged);您可能没有注册事件:backgroundWorker2.ProgressChanged+=new ProgressChangedEventHandler(backgroundWorker2\u ProgressChanged);