Bonjour à tous!
je cherche une solution pour afficher des lignes de texte dans une textbox durant l'exécution du soft. En général tout se fige et on doit attendre la fin de l'exécution pour avoir le résultat.
Merci d'avance,
Cédric
Bonjour à tous!
je cherche une solution pour afficher des lignes de texte dans une textbox durant l'exécution du soft. En général tout se fige et on doit attendre la fin de l'exécution pour avoir le résultat.
Merci d'avance,
Cédric
si ce que tu fais est long, ca peut "bloquer" l'appli pendant le traitement
il faut donc utiliser un nouveau thread pour ce traitement
dim th as new system.threading.thread(addressof nom_de_la_sub)
th.start
th.Start fait qu'un nouveau processus comment à la sub ue t'as choisit et le thread principal continue donc sur la ligne d'après
quand la sub est terminée, le 2eme processus s'arrete ...
après tu peux faire en sorte que ton processus principal ait un timer qui lit une variable locale qui indique l'état d'avancement et le 2eme thread qui écrit dans cette variable à chaque étape ...
Ou alors utilise le BackgroundWorker
merci pour vos réponses.
je ne connais pas le backgroundworker, je vais voir comment cela fonctionne...
Au niveau des thread j'ai essayé mais il me dit que la textbox que j'appelle doit être déclarée dans le thread et non dans le lancement principale du programme. Sorry si je ne suis pas très clair...
c'est vrai que le backgroundworker semble p-e une bonne idée... je voulais aussi mettre une barre de défilement...
Dans ce cas la c'est la solution
Va voir sur ce site, il y a un tutos sur le backgroudworker, sinon va voir sur cette page pour voir un exemple
Merci! je testerai demain ou vendredi.
Si tout est nickel je cliquerai sur "résolu"!
Bon, c'est pas facile à comprendre au début mais après ca va.
Il faut en fait ajouter un BackgroundWorker puis ajouter des déclarations de délégués.
Puis on appel le BGW avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Delegate Sub WriteLineAdd(ByVal Valeur As String) 'declare un délégué Private Sub WriteLine(ByVal Valeur As String) Result.TextBox1.Text &= Valeur ' on ajoute la ligne End Sub
Mais mes préférés sont ceux-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part BGW1.RunWorkerAsync()
Fonction lancée par le Run:
Fonction lancée lorsque le BGW se termine:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub BGW1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW1.DoWork Analyse() End Sub
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub BGW1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGW1.RunWorkerCompleted 'Result.ShowDialog() Me.ButtonAnalyser.Text = "Analyser" Me.ButtonAnalyser.Enabled = True End Sub
A quoi sert le délégué dans tous ça ?
Quelques chose m'échappe là...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Private Delegate Sub WriteLineAdd(ByVal Valeur As String) 'declare un délégué
Ben je ne sais pas... c'était comme ca dans l'exemple... si tu as une autre idée sur l'appel des fct je t'écoutes :d
Modification:
Si on n'utilise pas les délégations, ne risque-t-on pas d'avoir des
Opération inter-threads non valide : le contrôle 'TabControl1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager