Согласен, сделано принципиально неправильно. Гораздо логичнее, если я буду вызывать Application.Run() для прогресс бара из основного потока, а тяжелая операция выпоняется в другом gjnjrt и репортит в основной. По окончании дополнительный поток убивает цикл Application.Run() и выполнение основного потока продолжается.
Жалко, что раньше об этом не подумал, типо работает и работает.
Но с другой стороны вопрос остается открытым — в связи с чем основная форма отправляется на задний план? Ведь MessageBox вызывается из освного потока, то есть у него родителем является главная форма.