Question

J'apprends C # 3.5 et je veux savoir ce que fait [STAThread] dans nos programmes?

Était-ce utile?

La solution

Le STAThreadAttribute est essentiellement une exigence pour la pompe de messages Windows pour communiquer avec les composants COM. Bien que les principaux Windows Forms n'utilise pas COM, de nombreux composants du système d'exploitation tels que les boîtes de dialogue de système utilisez cette technologie.

MSDN explique la raison dans un peu plus en détail:

  

STAThreadAttribute indique que la   modèle de thread COM pour la   application est mono-thread   appartement. Cet attribut doit être   présent sur le point d'entrée de tout   application qui utilise Windows Forms;   si elle est omise, Windows   composants pourraient ne pas fonctionner correctement.   Si l'attribut est pas présent, le   application utilise le multithread   modèle appartement, ce qui est   pris en charge pour Windows Forms.

Ce blog ( Pourquoi est STAThread nécessaire? ) explique aussi bien l'exigence. Si vous voulez une analyse plus approfondie de vue sur la façon dont le modèle de thread fonctionne au niveau CLR, voir cet article MSDN Magazine de Juin 2004 (Archivé, avril 2009).

Autres conseils

Il indique au compilateur que vous êtes dans un modèle Single Thread Apartment. Ceci est une mauvaise chose COM, il est généralement utilisé pour Windows Forms (GUI) en utilisant Win32 pour son dessin, qui est mis en œuvre comme STA. Si vous utilisez quelque chose qui est le modèle STA de plusieurs threads vous obtenez des objets corrompus.

C'est pourquoi vous devez invoquer sur le fil d'un autre Gui (si vous avez fait toute forme de codage).

En gros ne vous inquiétez pas, juste accepter que les threads Windows GUI doivent être marqués comme substance STA sinon bizarre se passe.

  

Le STAThreadAttribute marque un fil   d'utiliser le monothread COM   Appartement si COM est nécessaire. Par   par défaut, .NET n'initialiser COM à   tout. Il est seulement quand COM est nécessaire,   comme quand un objet COM ou COM contrôle   est créé goutte ou lorsque glisser « n » est   nécessaire que le COM est initialisé. Quand   cela se produit, appelle .NET la   sous-jacente fonction CoInitializeEx,   qui prend un drapeau indiquant si   pour rejoindre le fil à un multithread   ou appartement monothread.

En savoir plus d'info (Archivé, Juin 2009)

et

Pourquoi STAThread nécessaire?

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