2016-11-23 1 views
0

Nous avons une application qui permet d'exporter et d'importer des données depuis/vers MS Project. La quantité de données peut être significative - plus de 1000 tâches. Mais même avec de petites portions de données, nous avons remarqué un étrange comportement du projet - il peut lancer une exception «application est occupée» sur votre visage lorsque vous effectuez plus d'une opération à la suite. Par exemple. créer une nouvelle tâche et lire sa date de fin. Il peut même lancer cette exception en tant que première opération après avoir créé l'objet Application. Signification:Comment puis-je éviter les exceptions "app est occupée" lorsque vous travaillez avec MS Project via com interop?

var projectApp = new Application(); 
projectApp.Open(...); 

À la deuxième ligne, nous pouvons attraper cette exception simplement parce que l'application Project est en cours de chargement.

J'ai essayé d'ajouter Thread.Sleep, mais ce n'est pas un bon moyen, car certaines opérations nécessitent plus de temps que les autres, et le temps nécessaire pour le fonctionnement est différent sur différents ordinateurs (en raison des performances).

Ainsi, le questuin est: Y a-t-il un moyen de détecter que l'application Project est occupée sans avoir toujours ces exceptions imprévisibles?

+1

Google "C# CoRegisterMessageFilter" pour les résultats. –

Répondre

1

L'application de STA à une tâche thread et l'utilisation de OleMessageFilter Register/Revoke trouvé via google ont résolu les problèmes! Merci à Hans Passant pour son commentaire qui m'a conduit à cette réponse!