SetApartmentState и [STAThread]
в Watin это исходный код, есть такой фрагмент кода:
public void NavigateToNoWait(Uri url)
{
var thread = new Thread(GoToNoWaitInternal);
thread.SetApartmentState(ApartmentState.STA);
thread.Start(url);
thread.Join(500);
}
[STAThread]
private void GoToNoWaitInternal(object uriIn)
{
var uri = (Uri)uriIn;
NavigateTo(uri);
}
поскольку созданный поток имеет свой набор состояния квартиры, почему [STAThread]
атрибут добавлен в метод? Меня не интересует конкретный фрагмент кода, но мне интересно, если STAThread
атрибут необходим вообще.
Примечания:
- метод
GoToNoWaitInternal
не используется в другом месте. - весь проект watin о манипулировании WebBrowser объекты (окна Internet explorer в целом). Таким образом, мы манипулируем COM-объекта.
2 ответов
просто прочитайте документацию для STAThreadAttribute
(выделено мной):
применить этот атрибут к методу точки входа (
Main()
метод в C# и Visual Basic). это не влияет на другие методы. чтобы установить состояние квартиры потоков, которые вы запускаете в своем коде, используйтеThread.SetApartmentState
метод перед началом потока.
Итак, в этом случае атрибут не должен иметь никакого эффекта.
следует отметить, что STA (однопоточная квартира) является моделью резьбы, используемой pre-.Net Visual Basic. Он должен использоваться только на основном методе компонентов, которые будут подвержены COM. Автор кода, который вы пытаетесь понять, внешне не понял, как его предполагается использовать.