我正在尝试使用标签中的后台工作人员显示进度的百分比值。我添加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();
}
}
答案 0 :(得分:4)
您最有可能将整数除以整数,结果为零。首先将值转换为double,进行计算,然后将结果转换回int。
变化:
int percn = (e.ProgressPercentage / progressCount) * 100;
要:
int percn = (int)(((double)e.ProgressPercentage / (double)progressCount) * 100);