Question

  

Double possible:
   Pouvez-vous expliquer STA et MTA?

  

Tous les threads ThreadPool sont dans le   appartement multithread.

- Selon le MSDN

Qu'est-ce que cela signifie? Je suis vraiment préoccupé par la différence qui existe entre le modèle d’appartement multi et mono-fileté. Ou que signifie le modèle d'appartement? J'ai lu le MSDN à ce sujet, et cela n'a pas vraiment de sens pour moi. Je pense que je peux avoir une idée, mais je pensais que quelqu'un ici pourrait l'expliquer en anglais simple.

Merci, Anthony D

Mise à jour 1

trouvé ceci Pouvez-vous expliquer STA et MTA?

Quelqu'un peut-il être plus descriptif?

Mise à jour 2

Je cherche également une réponse sur la manière dont cela s'applique au pool de threads et sur ce que je dois surveiller pour cette raison.

Était-ce utile?

La solution

STA (appartement à un seul thread) et MTA (appartement à plusieurs threads) ont à voir avec COM . Les composants COM peuvent être conçus pour être accessibles par un seul thread, auquel cas ils sont hébergés dans un STA , ou ils peuvent être sécurisés en interne et hébergés dans un MTA . Un processus ne peut avoir qu'un seul MTA, mais plusieurs STA. Si vous n'utilisez que des composants COM, tout ce que vous devez savoir, c'est que vous devez adapter l'appartement aux composants, sinon des événements désagréables se produiront.

Autres conseils

En réalité, les STA et les MTA ont un impact sur le code .NET. Voir l'entrée de blog de Chris Brumme pour plus de détails alors vous aurez probablement besoin:

https://devblogs.microsoft.com/ cbrumme / apartments-and-pumping-in-the-clr /

Il est vraiment important de comprendre comment les STA pompent les messages dans .NET. Cela a des conséquences.

Si votre objet COM a besoin de croire qu'il se trouve dans un environnement à un seul thread, utilisez STA. Vous êtes assuré que la création et tous les appels seront effectués par le même fil. Vous pouvez utiliser le stockage local Thread en toute sécurité et vous n'avez pas besoin d'utiliser des sections critiques.

Si plusieurs threads peuvent accéder à votre objet COM simultanément, utilisez MTA - aucun protecteur ne sera mis en place.

As others have pointed out, it generally has little impact on .NET applications.

However, be aware that the Microsoft test host used for unit tests is actually implemented in an STA, which means that there are limitations on what you can do in unit test. For example you cannot do a WaitAll on a WaitHandle in a unit test is you're using Microsoft's test host.

You don't have to worry about it unless you're doing COM-interop, in which case there are marshalling issues. It has no ramifications for .net itself.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top