Extrait de l'article MSDN sur STAThread:
Indique que le modèle de thread COM pour une application est STA (single-threaded apartment).
(Pour référence, c'est l'article entier .)
Appartement à un seul thread ... OK, ça m'a dépassé la tête. De plus, j'ai lu quelque part qu'à moins que votre application n'utilise l'interopérabilité COM, cet attribut ne fait rien du tout. Alors, que fait-il exactement et comment affecte-t-il les applications multithread? Les applications multithreads (qui incluent tout ce qui va de toute personne utilisant Timer
s aux appels de méthodes asynchrones, pas seulement des threadpools et autres) devraient utiliser MTAThread, même si c'est «juste pour être sûr»? Que font réellement STAThread et MTAThread?
la source
Ce que cela fait, il s'assure que
CoInitialize
c'est appelé en spécifiant COINIT_APARTMENTTHREADED comme paramètre. Si vous n'utilisez aucun composant COM ou contrôle ActiveX, cela n'aura aucun effet sur vous. Si vous le faites, c'est un peu crucial.Les contrôles qui sont threadés cloisonnés sont en fait un thread unique, les appels qui leur sont effectués ne peuvent être traités que dans le cloisonnement dans lequel ils ont été créés.
Quelques détails supplémentaires de MSDN:
la source
CoInitialize()
en réponse à l'STAThread
attribut /ApartmentState
? Remarque: l'article sur MSDN est ici: fonction CoInitializeEx .CoInitialize()
interne? J'ai tracé l'attribut STAThread tout en bas mais la piste est devenue froide (je ne trouve pas la source pourThread::SetApartment
). La classe Thread de thread.h (le thread.h COM) est-elle documentée n'importe où? Est-ce MFC, ATL ou autre chose?STAThread est écrit avant la fonction Main d'un projet C # GUI. Il ne fait rien mais permet au programme de créer un seul thread.
la source