For your backgroundworker set WorkerReportsProgress to true . Subscribe to the ProgressChanged event as follows:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (var i = 0; i < 1000; i++) { backgroundWorker1.ReportProgress(i); } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { Console.WriteLine(e.ProgressPercentage); }
If you need to pass more than just int from your background thread to the user interface thread, then you can do something like this:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (var i = 0; i < 1000; i++) { var myObjectInstance = new MyObject{ ...}; backgroundWorker1.ReportProgress(null, myObjectInstance); } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { var myObjectInstance = (MyObject)e.UserState; Console.WriteLine(myObjectInstance); }
source share