我的进度栏和循环(在C#上)有问题。 我需要解析项目集合(通过foreach循环),对于找到的每个对象,我需要增加进度条(通过for循环)...但是我的代码针对找到的每个对象运行,这是正常的,但我找不到解决方法...
这是我的简化代码:
int totalSteps = lv_selection.Items.Count;
foreach (string p in lv_selection.Items)
{
for (int i = 0; i < totalSteps; i++)
{
// A time consuming job
(sender as BackgroundWorker).ReportProgress((int)(100 / totalSteps) * i, null);
// Update the progressbar's text (located in another form)
this.Dispatcher.Invoke(() =>
{
progressbarForm.Progress(p);
});
}
}
进度条按预期进行,但对于我集合中的每个项目(“ p”变量)。我知道为什么,但是我不知道该如何解决。
还尝试互换for和foreach循环。并在“耗时的工作”之后设置for循环。
有人可以帮助我吗?
非常感谢。
答案 0 :(得分:0)
我终于明白了! :)
我尝试使用一种技巧,效果很好。
我在foreach之前创建一个整数变量,将其设置为0。在foreach内部,我将该变量加1,然后将其值发送到我的进度栏。
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
int totalSteps = lv_selection.Items.Count;
int currentStep = 0;
// Installations
foreach (string p in lv_selection.Items)
{
currentStep++;
// My long task
this.Dispatcher.Invoke(() =>
{
progressbarForm.Progress(p);
});
(sender as BackgroundWorker).ReportProgress((int)(100 / totalSteps) * currentStep, null);
}
}