Solved

Progress Bar

Posted on 2010-08-18
10
519 Views
Last Modified: 2012-05-10
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
0
Comment
Question by:San24
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
  • +1
10 Comments
 
LVL 18

Accepted Solution

by:
Anil Golamari earned 144 total points
ID: 33469066
0
 
LVL 7

Assisted Solution

by:jdavistx
jdavistx earned 214 total points
ID: 33469146
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
 

Author Comment

by:San24
ID: 33469206
@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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:San24
ID: 33469237
@lucky85 - Thanks for the links. I was hoping the links were in more detail.
0
 
LVL 18

Assisted Solution

by:Anil Golamari
Anil Golamari earned 144 total points
ID: 33469336
0
 
LVL 7

Assisted Solution

by:jdavistx
jdavistx earned 214 total points
ID: 33469395
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
 
LVL 5

Assisted Solution

by:puffdaddy411
puffdaddy411 earned 142 total points
ID: 33474683
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
 
LVL 5

Assisted Solution

by:puffdaddy411
puffdaddy411 earned 142 total points
ID: 33474690
Sorry for the error.  In the second section, "PackageBGWorker" should be "BGWorker" in your example.
0
 

Author Comment

by:San24
ID: 33474835
@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
 
LVL 7

Assisted Solution

by:jdavistx
jdavistx earned 214 total points
ID: 33475012
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

Featured Post

Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question