Affichage "Live "dans ListView - VB/VBA/VBS - Programmation
Marsh Posté le 17-08-2009 à 19:59:27
Salut
Il n'y a personne qui peut m'aider ou est ce que je ne suis pas clair dans mes explications?
Marsh Posté le 20-08-2009 à 21:57:44
Salut
J'ai fini par utiliser "Lst_Result.Items(Ligne).EnsureVisible()" et "Lst_Result.Refresh()"
Je vois les données lues dans le fichier s'ajouter dans le ListView.
Mais sur la fin je recois un message.
"
ContextSwitchDeadlock a été détecté
Message: Le CLR n'a pas pu effectuer de transition du contexte COM 0x20b2ce0 au contexte COM 0x20b2f30 pendant 60 secondes.
Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue
sans pompage des messages Windows.
Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire.
Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles)
et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.
"
Ce n'est pas vraiment une erreur, les données du fichier se trouvent bien toutes dans le ListView.
Mais j'aimerais comprendre le message, comment fait on pour "pomper les messages Windows" ?
Enfin, plutôt savoir quoi faire pour qu'il ne s'affiche plus ?
Code :
|
Marsh Posté le 23-08-2009 à 11:18:19
Pas de solution à ton problème, mais peut être une piste pour le contourner : mettre un message (acquisition des données, ceci peut prendre plusieurs minutes) en remplaçant le curseur par le sablier. Eventuellement, gérer un évènement "Annuler" ?
Marsh Posté le 23-08-2009 à 13:40:45
Merci pour ta solution, c'est une bonne idée.
je vais voir comment faire.
Afficher un message, c'est compliqué; gérer l'annulation me semble un peu plus compliqué
Ca me permettra d'en apprendre plus en VB.
Marsh Posté le 15-08-2009 à 18:01:07
Bonjour
Je m'essaye à VB 2008 (Express Edition).
Dans le programme, je lis un fichier .csv pour remplir un ListView.
Je n'ai aucun problème pour lire le fichier et injecter son contenu dans la ListView.
Le fichier contenant plus de 2000 lignes, lorsque je lance l'opération, on dirait que le programme ne fait rien,
et tout d'un coup, le contenu du ListView s'affiche.
Ce que j'aimerais, c'est que l'affichage du ListView suive la progression du travail en affichant toujours la dernière ligne ajoutée,
de façon à ne pas avoir l'impression que le programme est planté.
Un peu comme si j'appuyais sur la touche "Fin" après l'ajout de chaque lignes.
J'ai essayé d'utiliser Lst_Result.Refresh() dans la boucle après ajout d'une ligne,
ca donne moins l'impression que le programme est planté, mais c'est pas encore cela.
Ca donne un effet trop flash; et de plus la ListView reste sur les premiers.
Comment puis je faire pour que le ListView affiche toujours la dernière ligne ajoutée ?
Merci d'avance