UI updates; multithreading.

Use a progress bar to indicate the overall progress;
Use a BackgroundWorker to do the time-consuming work.