Поскольку в вашем (искусственном) сценарии вы отправляете 1000 запросов на обновление в основной поток.
У него нет времени на выполнение цикла ожидания (необходимо выполнить обновление экрана).
Но (благодаря TerrorAustralis) вы должны начать с объединения ваших методов bgWorker_ReportProgress и myProgressReporter.Теперь вы синхронизируете дважды, что является возможной причиной переполнения стека.Отправка событий UpdateProgress является одной из основных функций Backgroundworker:
private void bgWorker_ReportProgress(object sender, ProgressChangedEventArgs e)
{
//System.Windows.Threading.Dispatcher disp = button1.Dispatcher;
//disp.BeginInvoke(myProgressReporter,e.ProgressPercentage);
progressBar1.Value = progressPercentage; // safe because we're on the main Thread here
}