I have a multi-step BackgroundWorker process. I use a marquee progress bar because several of these steps are run on a iSeries server so there isn't any good way to determine a percentage. What I am envisioning is a label with updates after every step. How would you recommend updating a label on a winform to reflect each step?
Figured I would add a bit more. I call some CL and RPG programs via a stored procedure on an iSeries (or IBM i or AS/400 or a midrange computer running OS/400... er... i5/OS (damn you IBM for not keeping the same name year-to-year)).
Anyway I have to wait until that step is fully complete before I can continue on the winform side. I was thinking of sending feedback to the user giving the major steps.
- Dumping data to iSeries
- Running month-end
- Creating reports
- Uploading final results
I probably should have given this in the beginning. Sorry about that. I try to keep my questions general enough for others to make use of later rather than my specific task.
How many steps is there? If there's 10 steps, simply use 10% step up marker for the end of each step that completed successfully.
This is one of the points of a background worker in essence. Use a
ProgressBar
and just determine how far along the progress is, according to your algorithm.(As has been mentioned, if they're 10% through, send
10
, if they're 50% through, send50
)Using a
BackgroundWorker
bgWrkAdd the following event:
After each major step that you think deserves a user updates do the following:
bgWrk.ReportProgress(intValue);
A couple of notes:
You can pass an
Object
as well in theReportProgress()
method, so you would be able to update a label with a string object etc, however a progress bar is still the universal symbol of "hold on, i'm doing something"If you have any indeterminate polling, and you are using a
ProgressBar
, try use it as an Indeterminate ProgressBar, or a spinner or such. WPF has a built in property to make a progress bar indeterminate which is useful.