进度条计数百分比未正确更新 win c#

匿名
2024-05-16T06:14:57.01+00:00

我正在尝试应用进度条。这里的百分比更新不正确。问题出在哪里。

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%”。

这怎么可能......?

65532-image.png

Note:此问题总结整理于: Progress bar count percentage not updating correctly win c#

开发人员技术 | C#
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,681 信誉分 Microsoft 外部员工
    2024-05-16T13:17:39.29+00:00

    根据您的代码,存在一个问题,即 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);  
      
        }  
    }  
    

    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。