关于进度条更新 [英] Regarding progressbar update

查看:84
本文介绍了关于进度条更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用类似的代码:



  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 by arr.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆