Что ж, чтобы запустить код в новом потоке STA, вы должны создать новый поток и явно сделать его STAThread, используя Thread.SetApartmentState
перед его запуском. Затем вам нужно будет использовать Control.BeginInvoke
для перенаправления вызовов обратно в поток пользовательского интерфейса - вы не хотите использовать BackgroundWorker
или Task
, так как они будут использовать поток пула потоков.
С другой стороны, не ясно, поможет ли это в этом случае - если вы используете WebBrowserControl
, вам, вероятно, потребуется запустить цикл обработки сообщений и т. Д.
Не совсем понятно, что вы подразумеваете под "использовать его методы из основного интерфейса". Является ли этот WebBrowserControl часть пользовательского интерфейса, который работает в нормальном потоке пользовательского интерфейса? Если это так, вам нужно маршалировать в этот поток из другого потока (например, используя Control.BeginInvoke
) - и другой поток не обязательно должен быть потоком STA, чтобы это произошло. *