Frage

Ich lerne C # 3.5 und ich möchte wissen, was [STAThread] in unseren Programmen tut?

War es hilfreich?

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

Warum ist STAThread erforderlich?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top