wardavb
Messages postés25Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention12 août 2008
-
14 sept. 2006 à 11:59
wardavb
Messages postés25Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention12 août 2008
-
14 sept. 2006 à 13:33
bonjour a tous
j'ai cree une form1 toute simple avec un bouton et un label
le bouton lance un sub ,qui ouvre un fichier texte et compte les lignes de mon fichier (4 millions de lignes) (+ de 30 mn )
- a chaque ligne ,le sub met a jour le label comptant les lignes lues
label1.text=no
label1.update
Cependant ,des que je touche a la fenetre pour la deplacer ,l'affichage s'arrete ,alors que le
programe lui continue apparement de fonctioner
j'ai des fois un message form 1 ne repond pas sur le haut de ma form
j'ai essayé de rajouter me.update et me.refrech mais rien a faire
cela se produit aussi si je clique sur une autre fenetre windows ,ou avec l'economiseur ecran
comment faire pour conserver ma fenetre ? ,la reduire la deplacer et avoir l'affichage de mon compteur a la demande ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 14 sept. 2006 à 13:14
Le problème c'est que tu as surrement fait une boucle pour traiter ton fichier. Cette boucle prend ébormément de temps, vu le nombre de lignes à traiter. Ton application occupe donc tout son temps à travailler sur cette boucle, elle n'a plus la possibilité de recevoir et de répondre aux messages venant du système.
Pour prendre une image, c'est comme si tu étatis tellement prise à lire un livre passionnant, que tu ne verrais même pas la cambrioleur prendre ta tv devant toi.
Le but du DoEvents, est de rendre la main au système quelques instants (de temps en temps, tu releve les yeux de ton livre, pour regarder autour de toi). Ainsi ton application a le temps de recevoir et de répondre aux message venant de Windows. Evidement ça peu légèrement augmenter le temps de traitement.
Ci-dessous, l'explication du msdn :
Lorsque vous exécutez un Windows Form, il crée un formulaire qui attend
ensuite les événements à gérer. Chaque fois que le formulaire gère un événement,
il traite l'ensemble du code associé à cet événement. Tous les autres événements
attendent dans la file d'attente. Pendant que votre code gère l'événement, votre
application ne répond pas. Par exemple, la fenêtre ne se repeint pas si une
autre fenêtre est glissée par-dessus.
Si vous appelez DoEvents dans votre code, votre application peut alors
gérer les autres événements. Par exemple, si vous disposez d'un formulaire qui
ajoute des données à [T_System_Windows_Forms_ListBox.htm ListBox] et
DoEvents à votre code, alors votre formulaire se repeint lorsqu'une autre
fenêtre est glissée par-dessus. Si vous enlevez DoEvents de votre code,
votre formulaire ne se repeindra alors pas tant que le gestionnaire d'événements
Click du bouton n'aura pas terminé son exécution.
Cette méthode est généralement utilisée dans une boucle pour traiter les
messages.
pour l'utilisation, dans ta boucle faut mettre au moins une instruction Application.DoEvents(), par ex au début, à la fin, ou bien alors juste après ton Label1.Text=no par exemple.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #