Was bedeutet [STAThread] tun?
-
20-09-2019 - |
Frage
Ich lerne C # 3.5 und ich möchte wissen, was [STAThread]
in unseren Programmen tut?
Lösung
Die STAThreadAttribute
ist im Wesentlichen eine Voraussetzung für die Pumpe Windows-Nachricht mit COM-Komponenten zu kommunizieren. Obwohl Kern Windows Forms nicht COM nicht verwendet, tun viele Komponenten des OS wie Systemdialoge diese Technologie verwenden.
MSDN erklärt den Grund in etwas genauer:
STAThreadAttribute zeigt an, dass die COM Threading-Modell für die Anwendung ist Single-Threaded Wohnung. Dieses Attribut muss sein die auf dem Eintrittspunkt jeden Anwendung, die Windows Forms verwendet; wenn es weggelassen wird, die von Windows Komponenten möglicherweise nicht korrekt funktionieren. Wenn das Attribut nicht vorhanden ist, die Anwendung nutzt die Multi-Thread Wohnung Modell, das nicht der Fall ist unterstützt für Windows Forms.
Dieser Blog-Eintrag ( Warum ist STAThread erforderlich? ) auch die Anforderung recht gut erklärt. Wenn Sie eine tiefer gehende Ansicht wollen, wie das Threading-Modell auf der CLR Ebene funktioniert, finden Sie diese MSDN Magazine Artikel vom Juni 2004 (Archiv, April 2009).
Andere Tipps
Es teilt den Compiler mit, dass Sie in einem einzigen Thread Apartment-Modell sind. Dies ist ein Übel COM Sache, es in der Regel für Windows Forms verwendet wird (GUIs), wie das verwendet Win32 für seine Zeichnung, die als STA implementiert ist. Wenn Sie etwas verwenden, das von mehreren Threads STA-Modell ist dann erhalten Sie Objekte beschädigt.
Dies ist, warum Sie auf die Gui von einem anderen Thread aufgerufen haben (wenn Sie jegliche Form getan haben Codierung).
tun Grundsätzlich keine Sorgen darüber, akzeptieren nur, dass Windows-GUI-Threads als STA sonst weird stuff markiert werden müssen, geschieht.
Die STAThreadAttribute markiert einen Faden Für die Nutzung der Single-Thread-COM Wohnung, wenn COM benötigt. Durch standardmäßig .NET nicht initialisiert COM an alle. Es ist nur, wenn COM benötigt wird, wie wenn ein COM-Objekt oder COM Steuer wird erstellt, oder wenn drag ‚n‘ drop ist benötigt wird, wird das COM initialisiert. Wann das geschieht, .NET ruft die zugrunde liegende CoInitializeEx Funktion, Womit ein Flag, das anzeigt, ob das Gewinde ein Multi-Threaded beizutreten oder Single-Threaded-Wohnung.
Lesen Sie mehr Informationen hier (Archiv, Juni 2009)
und