Ich lerne C # 3.5 und möchte wissen, was [STAThread]
in unseren Programmen funktioniert.
quelle
Ich lerne C # 3.5 und möchte wissen, was [STAThread]
in unseren Programmen funktioniert.
Dies STAThreadAttribute
ist im Wesentlichen eine Voraussetzung für die Kommunikation der Windows-Nachrichtenpumpe mit COM-Komponenten. Obwohl Windows Forms im Kern kein COM verwendet, verwenden viele Komponenten des Betriebssystems, z. B. Systemdialoge, diese Technologie.
MSDN erklärt den Grund etwas ausführlicher:
STAThreadAttribute gibt an, dass das COM-Threading-Modell für die Anwendung Single-Threaded-Apartment ist. Dieses Attribut muss am Einstiegspunkt einer Anwendung vorhanden sein, die Windows Forms verwendet. Wenn es weggelassen wird, funktionieren die Windows-Komponenten möglicherweise nicht richtig. Wenn das Attribut nicht vorhanden ist, verwendet die Anwendung das Multithread-Apartmentmodell, das für Windows Forms nicht unterstützt wird.
Dieser Blog-Beitrag ( Warum ist STAThread erforderlich? ) Erklärt die Anforderung ebenfalls recht gut. Weitere Informationen zur Funktionsweise des Threading-Modells auf CLR-Ebene finden Sie in diesem Artikel des MSDN-Magazins vom Juni 2004 (Archiviert, April 2009).
[STAThread]
?Es teilt dem Compiler mit, dass Sie sich in einem Single Thread Apartment-Modell befinden. Dies ist eine böse COM-Sache, sie wird normalerweise für Windows Forms (GUIs) verwendet, da Win32 für die Zeichnung verwendet wird, die als STA implementiert ist. Wenn Sie ein STA-Modell aus mehreren Threads verwenden, erhalten Sie beschädigte Objekte.
Aus diesem Grund müssen Sie die GUI von einem anderen Thread aus aufrufen (wenn Sie eine Formularcodierung durchgeführt haben).
Machen Sie sich im Grunde keine Sorgen, akzeptieren Sie einfach, dass Windows-GUI-Threads als STA markiert sein müssen, da sonst seltsame Dinge passieren.
quelle
Weitere Informationen finden Sie hier (Archiviert, Juni 2009)
und
Warum ist STAThread erforderlich?
quelle