Aus dem MSDN-Artikel zu STAThread:
Gibt an, dass das COM-Threading-Modell für eine Anwendung Single-Threaded-Apartment (STA) ist.
(Als Referenz ist das der gesamte Artikel .)
Single-Threaded-Wohnung ... OK, das ging mir über den Kopf. Außerdem habe ich irgendwo gelesen, dass dieses Attribut, wenn Ihre Anwendung nicht COM-Interop verwendet, überhaupt nichts bewirkt. Was genau macht es und wie wirkt es sich auf Multithread-Anwendungen aus? Sollten Multithread-Anwendungen (zu denen alles gehört, was Timer
s verwendet, bis hin zu asynchronen Methodenaufrufen, nicht nur Threadpools und dergleichen) MTAThread verwenden, auch wenn dies nur aus Sicherheitsgründen erfolgt? Was machen STAThread und MTAThread eigentlich?
quelle
Damit wird sichergestellt,
CoInitialize
dass COINIT_APARTMENTTHREADED als Parameter angegeben wird. Wenn Sie keine COM-Komponenten oder ActiveX-Steuerelemente verwenden, hat dies keinerlei Auswirkungen auf Sie. Wenn Sie dies tun, ist dies von entscheidender Bedeutung.Steuerelemente mit Apartment-Thread sind effektiv Single-Thread-Steuerelemente. Anrufe, die an sie gesendet werden, können nur in der Wohnung verarbeitet werden, in der sie erstellt wurden.
Einige weitere Details von MSDN:
quelle
CoInitialize()
Antwort auf dasSTAThread
Attribut / aufruftApartmentState
? Hinweis: Der Artikel zu MSDN finden Sie hier: CoInitializeEx-Funktion .CoInitialize()
intern? Ich habe das STAThread-Attribut bis ganz nach unten verfolgt, aber der Pfad ist kalt geworden (ich kann die Quelle für nicht findenThread::SetApartment
). Ist die Thread-Klasse von thread.h (der COM-Thread.h) irgendwo dokumentiert? Ist es MFC, ATL oder etwas anderes?STAThread wird vor der Hauptfunktion eines C # GUI-Projekts geschrieben. Es macht nichts anderes, als dass das Programm einen einzelnen Thread erstellen kann.
quelle