Нельзя использовать BGW для отображения формы, поскольку у потока нет нужного состояния. Вам нужно будет использовать Thread, чтобы вызвать его метод SetApartmentState (), чтобы переключить его на STA. Вам также нужен цикл сообщений в потоке, чтобы сохранить форму активной, что требует вызова Application.Run (). И форма должна быть создана в этой теме. Таким образом:
var t = new Thread(() => Application.Run(new Form1()));
t.SetApartmentState(ApartmentState.STA);
t.Start();
Одна большая проблема с этой формой состоит в том, что она не может принадлежать ни одному окну в вашем потоке пользовательского интерфейса. Придав ему тенденцию исчезать за окном другого приложения. Кроме того, ваш поток пользовательского интерфейса все еще не работает, его окна будут появляться с сообщением «Не отвечает» в строке заголовка через несколько секунд.
Правильный способ сделать это - наоборот: запустить трудоемкий код в другом потоке, BGW был бы очень хорошим выбором. Поток пользовательского интерфейса должен отображать вашу форму прогресса. BackgroundWorker.ReportProgress идеально подходит для обновления индикатора выполнения.