我想在程序执行某些SQL Server查询时显示进度条。我使用C# Tutorial - Progress Bar
中的代码以下代码:
<div id="image" style="background-image: url(/test.com/test.jpg)">
但是这个功能不能像我预期的那样工作。我的“列表”有13个项目,但它只执行大约7-8项。我必须多次点击“更新”按钮才能得到我需要的所有东西。我不知道如何强制程序等待函数“excuteAutoUpdate”(在这种情况下)完成然后继续循环功能。我对多线程编程很新,所以有很多我不理解的东西。我搜索像背景工作者这样的东西,但我不能将它应用于我的情况。
你能告诉我如何解决它吗?
谢谢!
答案 0 :(得分:2)
您在每个循环中递增i
两次。
for(int i=0;i<totalprogress;i++) // HERE
{
...
progressreport.PercentComplete = i++ * 100 / totalprogress; // AND HERE
...
}
因此,您实际上只处理(最多)一半结果。这就是为什么你必须不断运行它来实际处理所有事情的原因。
另请注意,由于后递增(i++
)在递增之前返回i
的值,因此第一个循环将报告完成百分比为0
i++*100/totalprogress
=&gt; 0*100/totalprogress
=&gt; 0
将您的代码更改为:
for(int i=0;i<totalprogress;i++)
{
...
progressreport.PercentComplete = (i+1) * 100 / totalprogress; // This line
...
}
或者,您也可以将其更改为:
for(int i=0;i<totalprogress;) //remove i++
{
...
progressreport.PercentComplete = (++i) * 100 / totalprogress; // change to pre-increment
...
}