Progress Bar

Experts.

I have a project which reads and writes files. I want to give visual feedback for the process going on. I thought a Progress Bar would be the way to go. How do I go about using it? Ideally I would want the progress indicator correspond to the amount of process completed.

Do I count the number of lines before hand, set the maximum and minimum values and the increment by a certain amount?

Guidance in the right direction is greatly appreciated.

Best,
San
San24Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jdavistxCommented:
Typically, you use ProgressBars inconjunction with BackgroundWorkers:
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

As your BackgroundWorker completes a task, in this case file I/O, it has the option to report its progress in which you can update a ProgressBar, notify the user, etc.

I'm not entirely sure what you're trying to do.  Are you wanting to report the progress as to the number of lines that have been read/written?
0
San24Author Commented:
@jdavistx - I thought I`ll have to use BackGroundWorker too. Yes, showing visually the amount of lines read and written is what I`m looking to do.
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

San24Author Commented:
@lucky85 - Thanks for the links. I was hoping the links were in more detail.
0
jdavistxCommented:
You may find this a bit more helpful, San24.
http://www.dreamincode.net/forums/topic/112547-using-the-backgroundworker-in-c%23/

Personally, I don't think I would use a progress bar to display the progress of number of lines being read/written.  I think I would probably display the information through something like a label which displays the current line being read/written.

If you were to follow the example in the above link, then I update a Label within ProgressChanged with the current line read/written count.  Actually, I suppose you could have a lot of Progress-based information. Have a progress bar for displaying the iteration through the files being operated on, another progress bar for displaying the actual I/O to said file, and then additionally you could display the number of lines/characters read/written per file.  That may be a bit overkill, though, as it's likely your I/O is going to execute very quickly anyway.

If you find that your I/O task cannot be split up in such a way to take use of the BackgroundWorkers progress reporting method, then you could use a ProgressBar that is set to Marquee.
0
puffdaddy411Commented:
You can do both.  You want to ensure your Progress Bar style is set to "ProgressBarStyle.Continuous".  I converted this from VB.NET using the DevFusion page so hopefully there aren't too many errors.
=P
 
I used a datatable and used a For Each statement to go through all of the rows.  In this table, there are 80000 rows.  The progress bar flows nicely and the label updates very fast.

private string UpdateProgressMessage;

private void BGWorker_DoWork(System.Object sender, System.ComponentModel.DoWorkEventArgs e)
{
	Int64 i = 0;
	Int64 Count = DS.Tables("MasterTable").Rows.Count;


	foreach (System.Data.DataRow Row in DS.Tables("MasterTable").Rows) {
		//Your Work Here

		i += 1;
		UpdateProgressMessage = i + " / " + Count + " Rows Processed";
		BGWorker.ReportProgress((i / Count) * 100);

	}

}


private void PackageBGWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
	//Set your label value to update
	PBLabel.Text = UpdateProgressMessage;

	//Set your ProgressBar value
	ProgBar.Value = e.ProgressPercentage;

}

Open in new window

0
puffdaddy411Commented:
Sorry for the error.  In the second section, "PackageBGWorker" should be "BGWorker" in your example.
0
San24Author Commented:
@jdavistx - . The actual information with the line or the line number number displayed on the label might not suit well for this application. It`s a good idea though. The reading and the writing takes some time, so just a visual feedback that the process is going on while the user is waiting might be good user interaction design.

Let me spend some time with Background worker and the progess bar and get back. As of now, I`ve never used them and my knowledge is nil.

@puffdaddy411 - With some changes to your code, let me try your solution. I`m not using DataTable.

@
0
jdavistxCommented:
I would imagine the biggest thing you need to keep in mind when using a BackgroundWorker is that you don't directly access GUI elements within your BackgroundWorker method.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.