Aus dem MSDN-Artikel auf STAThread:STAThread und Multithreading
Zeigt an, dass das COM-Threading-Modell für eine Anwendung ist Single-Threaded Apartment (STA).
(Als Referenz ist das the entire article.)
Singlethread-Apartment ... OK, das über den Kopf ging. Außerdem habe ich irgendwo gelesen, dass, wenn Ihre Anwendung COM-Interop verwendet, dieses Attribut überhaupt nichts tut. Was genau tut es und wie wirkt es sich auf Multithread-Anwendungen aus? Sollten Multithread-Anwendungen (die von irgend jemandem mit Timer
bis hin zu asynchronen Methodenaufrufen und nicht nur Threadpools und Ähnlichem reichen) MTAThread verwenden, selbst wenn es "nur um sicher zu gehen" ist? Was machen STAThread und MTAThread eigentlich?
Das ist zu stark vereinfacht. Multithread-Objekte können in jedem Thread ausgeführt werden. Apartment-Threading-Objekte können nur in der Wohnung ausgeführt werden, in der sie erstellt wurden. –
Ein Aufruf von einem STA-Objekt in einem STA-Thread an ein MTA-Objekt wird zu einem MTA-Thread marshallen (außer das MTA-Objekt implementiert den Freethread-Marshaller) . Wie ich schon sagte, die Details können kompliziert werden. (Ich habe einige Jahre am COM-Team gearbeitet * grins *) – Bruce
Manchmal müssen Sie sich dessen bewusst sein, auch wenn Sie COM nicht direkt verwenden. Ein Thread muss das Single-Threaded Apartment-Modell verwenden, wenn es grafische Fenster anzeigt. Aus diesem Grund wird [STAThread] immer über der Hauptmethode in einer Windows Forms-Anwendung angezeigt. –