开发人员技术 | C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
我正在尝试应用进度条。这里的百分比更新不正确。问题出在哪里。
progbar1.Maximum = dt.Rows.Count; // Total Records 1000
progbar1.Minimum = 0;
progbar1.Step = 3;
foreach (DataRow DR in dt.Rows)
{
progbar1.PerformStep();
progbar1.Value++;
}
在这里,初始进度百分比显示“57%”。但是,它支持启动 0%。
调试时显示“0%”。但是,在前端进度条中显示“57%”。
这怎么可能......?

Note:此问题总结整理于: Progress bar count percentage not updating correctly win c#
根据您的代码,存在一个问题,即 progbar1 的值将超过 foreach 循环中的最大值。 为了避免阻塞 UI 线程,我建议你使用 BackgroundWorker 来更新进度。 下面是一个可以参考的代码示例。
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Maximum = dt.Rows.Count;
progressBar1.Value = 0;
progressBar1.Step = 3;
progressBar1.Minimum = 0;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
}
DataTable dt = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i <= 1000; i++)
{
DataRow row = dt.NewRow();
dt.Rows.Add(row);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var backgroundWorker = sender as BackgroundWorker;
for (int j = 0; j <= dt.Rows.Count; j++)
{
backgroundWorker.ReportProgress((j * progressBar1.Maximum) / dt.Rows.Count);
}
}
如果回复有帮助,请点击“接受答案”并点赞。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。