J'ai un client COM VB6 qui effectue des appels vers un serveur ATL/COM STA inprocess. L'une des méthodes serveur, X, peut prendre un certain temps pour terminer, je dois donc pouvoir l'annuler. Ce que j'ai essayé était d'exécuter le code de la méthode dans un nouveau thread et d'inclure une autre méthode, Y, qui fait WaitForSinleObject. Ainsi, le client appelle d'abord X puis va dans une boucle appelant VB6 DoEvents et ensuite Y jusqu'à ce que Y indique que X a fini. Cela fonctionne bien, cependant, la mouche dans l'onguent est que le thread X déclenche également des événements au client via l'interface IConnectionPoint. Les événements passent bien, mais les appels GUI ne fonctionnent pas car, autant que je peux glaner, l'interface graphique ne peut fonctionner que sur un thread, c'est-à-dire le thread principal.L'interface graphique VB6 ne fonctionne pas dans un environnement COM multithread
Existe-t-il un moyen évident d'utiliser mon code existant? Alternativement, s'il vous plaît pouvez-vous suggérer d'autres façons que je pourrais accomplir cela.
Merci d'avance.
Merci beaucoup, je l'ai trié. J'ai cherché IConnectionPointImplMT et trouvé ce lien support.microsoft.com/kb/280512/EN-US/. Le code fourni a bien fonctionné après avoir changé 2 lignes (devrait être: m_vec.GetUnknown à la ligne 148 et m_vec.GetCookie à la ligne 196). Je ne comprends pas pourquoi j'ai besoin d'ajouter un marshaller - aucune mention de cela dans le lien? – Humbleton
Le marshaller est nécessaire lorsque vous souhaitez communiquer avec votre objet dans le thread vb6. Si ce n'est pas nécessaire, ... – Christopher