Bonjour,
J'ai fait un programme qui parcours le disque dur recursivement pour renommer des fichiers. Le traitement se fait dans un backgroundWorker, qui fait un reporting de l'etat d'avancement (progressbar) et qui peut etre abandonné (canceled).
J'ai 2 problemes :
1.
au fur et à mesure de l'avancement, je construit un log des actions réalisées en ajoutant des lignes dans une listbox. Mais je ne peut pas faire un add sur les items d'une liste box dans mon background worker car ce n'est pas thread safe. Comment le faire proprement ? j'ai lu pas mal de truc là dessus mais l'implémentation de la solution reste encore un peu obscure pour moi :-(
2.
Comme dans beaucoup d'applications qui écrivent un log, j'aimerai pouvoir :
- soit via un mode "scroll lock" ajouter des lignes dans ma listbox sans que le scroller ne descende automatiquement (facile, c'est le fonctionnement par défaut des listbox)
- soit avoir un défilement automatiquement de ma liste box au fur et a mesure que j'y ajoute des lignes (ce que j'ai essayé de faire grosso modo en selectionnant le dernier item de la liste box à chaque fois que j'y ajoute une ligne) :
Avez vous une autre idée que d'aller selectionner le dernier élément de la liste à chaque ajout pour simuler un "auto scroll" ? ou dois-je plutot utiliser un autre composant ? le tout devant fonctionner en thread safe dans le background worker.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 resultListBox.Items.Add(logs); resultListBox.SetSelected(resultListBox.Items.Count - 1, true); resultListBox.SetSelected(resultListBox.Items.Count - 1, false); resultListBox.Refresh();
merci d'avance pour vos lumières.
Partager