W Watin na source code, tam jest ten kawałek kodu:SetApartmentState i [STAThread]
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);
}
Ponieważ wątek utworzony ma swoje mieszkanie zestaw państwowej, dlaczego jest atrybutem [STAThread]
dodany do metody? Nie interesuje mnie konkretny fragment kodu, ale zastanawiam się, czy w ogóle potrzebny jest atrybut STAThread
.
Uwagi:
- Sposób
GoToNoWaitInternal
nie jest używany w innym miejscu. - Cały projekt watin dotyczy manipulowania obiektami WebBrowser (ogólnie przeglądarki Internet Explorer). W ten sposób manipulujemy obiektem COM.
Musi istnieć powód [Jeroen van Menen] (http://stackoverflow.com/users/52173/jeroen-van-menen) dodał go – Odys
@odyodyodys Musiałbyś go o to zapytać. – svick
Należy zauważyć, że 'STAThreadAttribute' only effects' main() ', ponieważ jest używane tylko w [ApplicationActivator.CreateInstance] (https://msdn.microsoft.com/en-us/library/ms146108%28v=vs.110%29. aspx), możesz zobaczyć, jak ten atrybut jest używany w [Źródło odniesienia] (https://referencesource.microsoft.com/#mscorlib/system/applicationactivator.cs,104) (w metodzie "wewnętrznej", 'ApplicationActivator. ExecuteAsAssembly() ') – jrh