关于进度条更新 [英] Regarding progressbar update
本文介绍了关于进度条更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用类似的代码:
private void backgroundWorker1_ProgressChanged( object sender,ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted( object sender,RunWorkerCompletedEventArgs e)
{
MessageBox.Show( 完整跨度>);
}
私有 void backgroundWorker1_DoWork(< span class =code-keyword> object sender,DoWorkEventArgs e)
{
int [] arr = new int [ 21 ];
for ( int i = 1 ; i < = 20 ; i ++)
{
arr [我] =我;
Thread.Sleep( 100 );
int m =(i / arr.Length)* 100;
backgroundWorker1.ReportProgress(i * m);
}
}
进度条未更新。但是,如果我将m替换为5,则可以看到进度。请帮助..在原始程序中我必须使用上述方法。谢谢。 :)
解决方案
嗯...记住你的整数数学吗?
(整数,介于1和1之间20个包含)/(整数,值21)== 0
所以...
int m =(i / arr.Length)* 100;
总是给
m
零。
试试这个:
< pre lang =c#> int m =(i * 100 )/ arr.Length;
整数除法导致它;
int m =(i / arr.Length)* 100;
i
除以arr .lenght
将始终为零。
将其更改为
< span class =code-keyword> int m =( int )((i /( double )arr.Length)*100);
然后将进度设置为;
backgroundWorker1.ReportProgress(m);
希望这会有所帮助,
Fredrik
I'm using a similar code:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Complete");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int[] arr = new int[21];
for (int i = 1; i <= 20; i++)
{
arr[i] = i;
Thread.Sleep(100);
int m = (i/arr.Length)*100;
backgroundWorker1.ReportProgress(i*m);
}
}
The progress bar isn't updating. But if I replace m by 5 the progress is seen. Please help.. In the original program I have to use the above approach. Thanks. :)
解决方案
Um...remember your integer math?
(integer, between 1 and 20 inclusive) / (integer, value 21) == 0
So...
int m = (i/arr.Length)*100;
Always gives
m
of zero.
Try this:
int m = (i * 100) / arr.Length;
Integer division is causing it;
int m = (i/arr.Length)*100;
i
divided byarr.lenght
will always be zero.
Change it to
int m = (int)((i/(double)arr.Length)*100);
And then set the progress to;
backgroundWorker1.ReportProgress(m);
Hope this helps,
Fredrik
这篇关于关于进度条更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文