Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 281
  • 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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

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