L'appel à Application.ProcessMessages est probablement juste nécessaire pour permettre au contrôle MSXML activeX de terminer le chargement du document. Il semble qu'ils utilisent le multitâche coopératif ici pour simuler le chargement du document en arrière-plan - l'ActiveX envoie des messages à lui-même pour traiter le morceau suivant ou quoi que ce soit.
Normalement, cela n'affecterait pas le flux de votre application, car la charge du document se produirait dans le cadre de votre boucle de message normale. Mais parce que vous voulez charger le document de façon synchrone (ne pas faire autre chose tant que le document n'est pas complètement chargé), vous êtes sensible à la façon dont il effectue le chargement en arrière-plan via les messages.
Une solution: voyez si vous pouvez supprimer l'obligation de charger le document de manière synchrone. Laisser la charge se produire quand cela arrive, mais déplacer la vérification de readState = complete dans une minuterie, peut-être sur un intervalle de 1 seconde. Lorsque la minuterie découvre que la charge de doc est terminée, éteignez vos activités de la chaîne alimentaire en aval.
Autre solution: Afficher une boîte de dialogue modale en attendant le chargement du document. Cela a l'avantage de désactiver le reste de votre interface utilisateur pour ne pas risquer d'être réentrant. Appeler ProcessMessages signifie que l'utilisateur peut toujours interagir avec votre fenêtre, cliquer sur les boutons, les menus, etc. En règle générale, cela entraînera des problèmes. L'affichage d'une boîte de dialogue modale ("dialogue de progression?") Évite la réentrance en désactivant tout ce qui se trouve derrière la boîte de dialogue modale.
Troisième possibilité: Remplacez Application.ProcessMessages avec PeekMessage et la logique pour examiner le message pour décider s'il doit le laisser passer ou le remettre dans la file d'attente de messages pour plus tard. C'est un peu sale mais peut fonctionner dans des cas très spéciaux.
Je recommande l'approche # 2, la boîte de dialogue modale.
Merci dthorpe –