Alternative à l'Application.DoEvents()
Je suis en train d'élaborer un système de messagerie basé sur le contrôle webBrowser pour que je puisse formater le texte cependant je s'il vous plaît. Lorsque l'utilisateur est hors ligne et est envoyé des messages, les messages sont stockés et un événement est envoyé pour chaque message quand ils se reconnecter. Lorsque j'ai mis le code html par défaut et pour le site, j'ai l'habitude d'utiliser:
while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
Cela fonctionne lorsque le programme s'exécute normalement. Lorsque l'utilisateur reçoit le message est envoyé lorsqu'ils sont hors ligne, ce qui déclenche le message suivant de l'événement et ainsi de suite, avec chaque message, jusqu'à la dernière. Cela signifie que le dernier message envoyé lorsqu'ils sont hors ligne, est la seule affiche. J'aimerais quelque chose comme Application.DoEvents() qui permet le contrôle pour maintenir à jour et de chargement, mais cela ne veut pas déclencher d'autres événements.
Grâce
EDIT:
J'ai résolu le problème en supprimant la fonction DoEvents() complètement. Au lieu de changer la DocumentText que j'ai travaillé, j'ai mis en place un générateur de chaîne, puis définissez le format html tout à la fois à la fin.
Application.DoEvents()
, normalement, cela indique un défaut dans la conception de votre. Est-il une raison vous ne pouvez pas utiliser le 'terminé' événement?J'ai essentiellement besoin de navigateur web à la fin du chargement, mais le thread en cours pour continuer à fonctionner. Je forme le message et de vérifier ensuite la sauvegarde de html. Si le code html est mal, je l'ai mise à jour, puis ajouter le message. Avant que j'ai jamais changer le texte du document I assurez-vous que le navigateur web est chargé et est au complet readystate.
OriginalL'auteur Nathan Tornquist | 2011-07-19
Vous devez vous connecter pour publier un commentaire.
Je vous recommande de cesser d'utiliser
Application.DoEvents()
, c'est de générer plus de problèmes qu'elle n'en résout. vérifier cette.Une meilleure façon, c'est soit d'utiliser un
AutoResetEvent
de notifier à chaque fois le chargement terminé, ou en déclenchant un événement à chaque fois que le chargement est terminé. aussi, vous pouvez exécuter votre attente sur un autre thread, afin de ne pas avoir à utiliserApplication.DoEvents()
...Cela ne résout pas mon problème, mais je suis accepter la réponse parce que le lien sur la fonction DoEvents(). Les informations fournies ont été assez pour moi de réécrire le programme.
OriginalL'auteur Jalal Said
Vous pouvez utiliser le Système.Le filetage.Fil de discussion.Join() comme une alternative à la fonction DoEvents(), car cette méthode s'arrête à votre thread en cours d'exécution jusqu'à ce que le précédent appel thread se termine l'exécution.
OriginalL'auteur Prahlad Yeri