Problème d'affichage de l'autocompletion avec temporisation

Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 16 oct. 2013 à 14:34
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 16 oct. 2013 à 17:34
Bonjour,
Je souhaite travailler avec une autocompletion suggest customisée, et dynamique : Dans un event sur le textchanged de ma textbox l'autocompletion se met à jour.
Le problème classique : Si je tape trop vite, j'ai droit à une accessviolationexception.
Donc j'ai voulu temporiser, mais je dois mal m'y prendre :
Dans mon textchanged, j'ai écrit
if (thSuggestTextBox != null && thSuggestTextBox.IsAlive)
thSuggestTextBox.Abort();
thSuggestTextBox = new Thread(suggestInTextBox);
thSuggestTextBox.Start();

Puis dans suggestInTextBox,
-je commence par Thread.sleep(500),
-je supprime l'AutoCompleteCustomSource de ma textbox
-je la réécris..
Ca me permet de ne pas taper de manière hachée dans ma textbox
Je n'ai plus de crash, mais l'autocompletion s'affiche avec un délai, puis disparait!
Concrètement,
- je tape certains caractères (3 minimum)->rien ne s'affiche
- Je change le texte->L'ancienne autocompletion s'affiche, puis disparait au bout de 500ms

J'ai essayé de faire du step by step pour voir à quel moment le programme affiche l'autocompletion, mais
Donc ma question : Comment je peux forcer l'affichage de l'autocompletion lorsqu'elle a été construite?
Si je travaille sans multi thread, je n'ai pas ce problème.

Merci beaucoup

2 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
16 oct. 2013 à 17:30
Bonsoir, merci d'utiliser la coloration syntaxique avec la petite icône <>, au dessus de la zone de texte.
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
16 oct. 2013 à 17:34
Je repose le code :
if (thSuggestTextBox != null && thSuggestTextBox.IsAlive)
thSuggestTextBox.Abort();
thSuggestTextBox = new Thread(suggestInTextBox);
thSuggestTextBox.Start(); 


J'En profite pour updater : J'ai trouvé une solution en simulant une touche, via
SendKeys.Send
à la fin de mon thread. Mais bon, c'est vraiment pas propre. Donc si qqun a plus propre je préférerais.
Merci beaucoup
0
Rejoignez-nous