COM, дедушка .NET, делает то, чего не делает .NET.Вы можете написать .NET-программу, которая использует List <> в потоке, и если вы не заблокируете ее должным образом, она потерпит неудачу без диагностики.COM, однако, знает о требованиях к потокам COM-компонента.И если компонент говорит, что он не является потокобезопасным, то вы не можете игнорировать это.Что означает сообщение об ошибке, его можно использовать только в «однопоточной квартире», STA.Поток STA имеет функцию автоматического перенаправления вызова, сделанного для компонента, из рабочего потока в поток, создавший компонент.Совершенно похоже на Control.Invoke (), но выполняется автоматически.
Это ограничивает ваши варианты использования многопоточного режима строго.Кроме поддержания этого потока в потоке пользовательского интерфейса приложения с графическим интерфейсом, единственное, что вы можете сделать, - это создать поток STA, в котором вы создаете экземпляры IE и watin. Этот ответ показывает вам, как.Обратите внимание, что BackgroundWorker не может этого сделать, его метод DoWork всегда выполняется в потоке MTA.Ключевой частью связанного кода является Thread.SetApartmentState, чтобы переключить поток в STA и цикл сообщений, запущенный Application.Run ().И то, и другое необходимо для правильной работы этих компонентов COM.