// This gets executed by the ProblemLoadingWorker private void ProblemLoadingWorker_DoWork(object sender, DoWorkEventArgs e) { int loadAm = (int)(e.Argument); // For each problem foreach (int i in Enumerable.Range(0, loadAm)) { // Load using ProblemData function ProblemData.LoadNext(1); // Report progress (updates loading bar) (sender as BackgroundWorker).ReportProgress(i * 100 / loadAm); } }