2009-10-05 5 views

Répondre

4

Windows forms nécessite que [STAThread] soit présent sur son point d'entrée principal. Cela ne fonctionnera que dans un état d'appartement à un seul thread. Vous pouvez utiliser votre objet COM STA sur le thread UI dans Windows Forms, sans problèmes.

L'approche habituelle consiste à créer votre propre thread et à définir le Thread.ApartmentState sur MTA (bien que ce soit la valeur par défaut) pour le thread séparé. Initialisez et utilisez vos composants COM MTA-Thread à partir de ce thread.

ThreadStart threadEntryPoint = ...; 

var thread = new Thread(threadEntryPoint); 
thread.ApartmentState = ApartmentState.MTA; // set this before you call Start()! 
thread.Start(); 
+0

Un nouveau thread (() => {COMObject = nouveau COMObject(); ... etc}). Start()? –

+0

Oui. Normalement, je n'utilise pas lambda pour un nouveau thread, juste parce que la méthode thread a tendance à être plus longue, mais cela fonctionnerait bien .... Les nouveaux threads par défaut à MTA, donc vous pouvez le faire pour le thread MTA. Il ne peut simplement pas être sur le thread d'interface graphique, car Windows Forms requiert STA. –

+0

J'ai essayé ceci avec des discussions, mais cela ne fonctionnera toujours pas. Mon winform semble fonctionner correctement avec [MTAThread]. D'autres idées? –

Questions connexes