Frage

Aus dem MSDN-Artikel auf STAThread:

  

Gibt an, dass das COM-Threading-Modell für eine Anwendung ist Single-Threaded Apartment (STA).

(Als Referenz ist das den gesamten Artikel .)

Single-Threaded Apartment ... OK, das über den Kopf ging. Außerdem habe ich irgendwo gelesen, dass es sei denn, die Anwendung von COM-Interop verwendet, dieses Attribut tatsächlich tut nichts. Also, was genau tut es, und wie funktioniert es Multithreading-Anwendungen auswirken? Sollten Multithreading-Anwendungen (die alles von jedermann enthält Timers asynchrone Methodenaufrufe, nicht nur threadpools und dergleichen verwendet wird) verwenden MTAThread, auch wenn es ‚nur um sicher zu sein‘? Was bedeutet STAThread und MTAThread eigentlich tun?

War es hilfreich?

Lösung

Apartment Threading ist ein COM-Konzept; wenn Sie nicht mit COM, und keiner der APIs, die Sie verwenden COM „unter der Decke“ nennen, dann brauchen Sie sich nicht um Wohnungen zu sorgen.

Wenn Sie müssen sich bewusst Wohnungen sein, dann können die Details erhalten ein wenig kompliziert ; eine wohl stark vereinfachte Version ist, dass COM-Objekte als STA markiert muss auf einem STAThread ausgeführt werden, und COM-Objekte markiert MTA auf einem MTA-Thread ausgeführt werden muß. Mit Hilfe dieser Regeln, COM kann Anrufe zwischen diesen verschiedenen Objekten optimieren, vermeiden Marshalling, wo es nicht notwendig ist.

Andere Tipps

Was es das tut es sorgt dafür, dass CoInitialize COINIT_APARTMENTTHREADED als Parameter aufgerufen wird, angeben. Wenn Sie keine COM-Komponenten verwenden oder ActiveX-Steuerelemente wird es überhaupt keine Wirkung auf Sie haben. Wenn Sie das tun, dann ist es eine Art von entscheidenden Bedeutung.

Steuerelemente, die Wohnung Gewinde sind effektiv Single-Threaded, Anrufe, um sie nur in der Wohnung verarbeitet werden, dass sie erstellt wurden.

Einige ausführlicher von MSDN:

  

Objekte in einem Single-Threaded erstellt   Apartment (STA) erhalten Methodenaufrufe   nur aus Faden ihrer Wohnung ist, so   nur Anrufe werden serialisiert und ankommen   bei Nachrichtenwarteschlange Grenzen (wenn die   Win32-Funktion PeekMessage oder   Sendmessage genannt wird).

     

Objekte auf einem COM-Thread in einem geschaffenen   Multi-Thread-Apartment (MTA) muss sein   können Methodenaufrufe erhalten aus   andere Threads zu jeder Zeit. Du würdest   implementieren typischerweise eine Form von   Gleichzeitigkeitssteuerung in einem multithreaded   Objektcode Win32   Synchronisations Primitiven wie   kritische Abschnitte, Semaphore oder   Mutex das Objekt der zum Schutz   Daten.

     

Wenn ein Objekt, das so konfiguriert ist,   läuft in der neutralen Gewinde Wohnung   (NTA) von einem Thread aufgerufen, die in ist   entweder eine STA oder die MTA, dass Faden   Transfer zum NTA. Wenn dieser Thread   Anschließend ruft CoInitializeEx, die   Aufruf schlägt fehl und kehrt   RPC_E_CHANGED_MODE.

STAThread wird vor der Hauptfunktion eines C # GUI-Projekt geschrieben. Es tut nichts, sondern erlaubt das Programm einen einzigen Thread zu erstellen.

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