Не создавайте компоненты графического интерфейса в фоновом потоке. Используйте фоновый поток для получения и обработки данных, а затем визуализируйте их в пользовательском интерфейсе в потоке main . Я знаю, что это неудобно, потому что
- создание большого количества элементов пользовательского интерфейса также может занять много времени и
- создание их в потоке пользовательского интерфейса требует от вас разделения кода на часть пользовательского интерфейса и часть обработки данных,
но на самом деле нет способа обойти это. Компоненты .NET UI не предназначены для обработки в фоновых потоках.
Чтобы выполнять только определенные операции вашего кода в основном потоке, вы можете использовать
someUIControl.Invoke(...)
(WinForms) или
Dispatcher.Invoke(...)
(WPF)
в обработчике событий DoWork
вашего BackgroundWorker. Кроме того, вы можете выполнять операции пользовательского интерфейса в обработчике событий RunWorkerCompleted
вашего BackgroundWorker, который всегда выполняется в потоке пользовательского интерфейса.