С вашим кодом много чего не так. Если можете, попробуйте сделать шаг назад и опишите, что именно вы хотите сделать.
BackgroundWorker
использует основанный на событиях асинхронный шаблон (EAP). Как таковой, он требует контекста потока для жизни. Потоки пользовательского интерфейса удовлетворяют этому требованию, но созданные вручную Thread
экземпляры этого не делают (если только вы не установите один или не сделаете экземпляр вторичным потоком пользовательского интерфейса).
Аналогично, компоненты пользовательского интерфейса привязываются к определенному потоку. Им требуется поток STA, который выполняет прокачку сообщений (например, Application.DoEvents
).
Мне кажется, что вы создаете руководство Thread
, а затем создаете компоненты пользовательского интерфейса из этого потока (так что вы знаете, что поток должен быть STA , а включает цикл прокачки сообщений, ни один из которые есть в вашем коде). Затем этот поток запускает BGW, который отправляет сообщения.
Непонятно, чего вы здесь добиваетесь - возможно, отображение диалога в отдельной теме?
Несколько потоков пользовательского интерфейса в приложении WinForms не являются официально поддерживаемым сценарием AFAIK, хотя некоторые люди заставили его работать. Я никогда не видел в этом необходимости.