[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 278
  • Last Modified:

dynamically change progress bar

Hi the below code should ensure that my progress bar on the relevent import form accurately shows the progress of my import and that is my problem - getting the progress bar to accurately show the progress of the import. Please help!

public override bool Import ( string filename, params object[] additionalParameters )
            {
                  
                  for ( int i = 0; i < 100; i ++ ) //This is the problem line because there could be any number of records
                  {

                        // Ensure it hasn't been cancelled
                        if ( !this._cancelled )
                        {
                              this.Raise_ProgressUpdated ( "Importing", "Client " + i.ToString (), i );//This will show "Client" + record number
                                                                        //Do import here
                              System.Threading.Thread.Sleep ( 50 );
                        }
                        else
                        {
                              this.Raise_Complete ( false );
                              return false;
                        }

                  }

                  this.Raise_Complete ( true );

                  return true;

            }
0
JakeyCakes
Asked:
JakeyCakes
  • 2
  • 2
2 Solutions
 
redpipeCommented:
Loop through the file first to get the correct number of rows, and then set the maximum of your progressbar:

public int NumberOfLines(string path)
{
      int num = 0;
      using (StreamReader sr = new StreamReader(path, Encoding.Default)) {
            while (sr.ReadLine() != null) {
                  num++;
            }
      }
      return num;
}
0
 
ozymandiasCommented:
You first have to check the number of records

    int n = number_of_records;
    // here make a callback or raise an event to set the correct max value in the progress bar

then

for (int i =0; i < n; i++)
{
    etc;
}

0
 
ozymandiasCommented:
sorry, didn't see redpipe's post
0
 
redpipeCommented:
Another approach is to check if the maximum of the progressbar is reached and adjust it accordingly

using (StreamReader sr = new StreamReader(path, Encoding.Default)) {
  if ( !_cancelled )
    if(YourProgressBar.Value >= YourProgressBar.Maximum){
      //Choose an appropriate value for dynamic increase. Could also be 10% or whatever that suites your purpose
      YourProgressBar.Maximum = YourProgressBar.Maximum + 100;
      // => Continue doing your magic  :-)
    }
  } else {
  }
  // When your done importing or the user has cancelled. Set the progressbar to 100% or hide it, to indicate that your done
  YourProgressBar.Value = YourProgressBar.Maximum;
}
0
 
JakeyCakesAuthor Commented:
Thank you both for your help, I am going to split the points evenly.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now