In response to your comment in Solution 1, here is my solution...
Essentially, you simply drop a background worker from the toolbox unto the the form and then hook up events and set properties as required. In your button click handler, you tell your background worker to start and you use its ReportProgress to report progress to the UI thread.
Since your duration is inderminate, you can set the appropriate style on the progress bar... or you might somehow try to find a way to estimate how long it would take. For example, you might uses the time taken to do some initial step and uses some ratio to estimate the total time. Add an extra 5% to that and if at the end of time, it is still not completed, set the progress bar in the indeterminated state again.
All steps are clearly explained here. Although that example if for Silverlight, it is essentially the same on WinForms (but you can hook events with the designer).
How to: Use a Background Worker[
^]