private void UpdateGUI(object sender, ProgressChangedEventArgs progressChangedEventArgs) { var worker = (BackgroundWorker)sender; var modules = _newModulesToShowByWorker[worker].ToList(); const int maxModulesProcessedPerIteration = 5; var first = 0; var count = Math.Min(maxModulesProcessedPerIteration, modules.Count); if (worker.CancellationPending) { _view.CancelModulesViewUpdateFor(worker); return; } while (count > 0) { if (worker.Equals(_actualWorker)) { if (worker.CancellationPending) { _view.CancelModulesViewUpdateFor(worker); return; } _view.DisplayModulesInOrder(modules.GetRange(first, count), worker, _jobOrder); first = first + count; count = Math.Min(maxModulesProcessedPerIteration, (modules.Count) - first); _jobOrder++; } } }