225 个问题
根据您的代码,存在一个问题,即 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);
}
}
如果回复有帮助,请点击“接受答案”并点赞。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。