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
Version imprimable
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 :D
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:
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:BGW1.RunWorkerAsync()
Fonction lancée par le Run:
Fonction lancée lorsque le BGW se termine:Code:
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:
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à... :koi:Code: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
Citation:
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éé.