2008-11-08 17 views
4

J'utilise l'implémentation du fichier composé d'IStorage à partir de C# (StgCreateDocfile).L'implémentation du fichier composé IStorage est-elle compatible avec les threads?

Est-il possible d'accéder en toute sécurité à une instance IStorage/IStream à partir de plusieurs threads, à condition de synchroniser les lectures et de m'écrire? Ou y a-t-il des problèmes de COM qui pourraient être problématiques ici? Par exemple, puis-je appeler EnumElements en toute sécurité pour obtenir tous les flux dans le stockage, tout en créant et en écrivant un nouveau flux (et à partir d'un thread différent)?

J'ai déjà écrit un test de stress pour ma mise en œuvre, et il n'a montré aucun problème, mais je dois être sûr à 100%. Je n'ai pas trouvé cette information dans les documents MSDN.

Répondre

1

Tuf un. Il y a un extrait à ce sujet dans la documentation de l'interface ILockBytes. Il indique que les implémentations par défaut de IStorage et IStream implémentent IMarshal. Ce qui les rendra sûres pour les threads, à condition de suivre les règles de threading COM. C'est facile à oublier quand les pointeurs d'interface sont en-proc. Vous devez utiliser quelque chose comme CoMarshalInterThreadInterfaceInStream() ou IGlobalInterfaceTable. Vous vous en tirerez en ne vous serrant pas.