In Watin der source code gibt es dieses Stück Code:SetApartmentState und [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);
}
Da das erzeugte Thread seine Wohnung Zustand gesetzt hat, warum ist das [STAThread]
Attribut dem Verfahren hinzugefügt? Ich bin nicht an dem spezifischen Stück Code interessiert, aber ich frage mich, ob STAThread
Attribut überhaupt benötigt wird.
Anmerkungen:
- Verfahren
GoToNoWaitInternal
nicht an anderer Stelle verwendet wird. - Das ganze wattin Projekt ist über die Manipulation von WebBrowser-Objekten (Internet-Explorer-Fenster im Allgemeinen). Daher manipulieren wir ein COM-Objekt.
Es muss einen Grund geben [Jeroen van Menen] (http://stackoverflow.com/users/52173/jeroen-van-menen) hat es hinzugefügt – Odys
@odyodyodys Sie müssten ihn danach fragen. – svick
Beachten Sie, dass 'STAThreadAttribute' nur' main() 'bewirkt, da es nur in [ApplicationActivator.CreateInstance] (https://msdn.microsoft.com/en-us/library/ms146108%28v=vs.110%29) verwendet wird. aspx), können Sie sehen, wie dieses Attribut in der [Referenzquelle] (https://referencesource.microsoft.com/#mscorlib/system/applicationactivator.cs104) verwendet wird (in einer internen Methode, ApplicationActivator). ExecuteAsAssembly() ') – jrh