Bonjour,
Toujours dans la suite de mon projet je souhaite faire en sorte que pour chaque ordinateur connecté sur le réseau je puisse "télecharger" un fichier après l'exécution d'un script sur la machine distante.
Procédure :
1) L'utilisateur clique sur un bouton (plus tard se traitement sera sûrement automatisé)
2) le programme va donc exécuter un script sur une machine distante et récupérer le fichier généré par le script. Cette action est executée autant de fois qu'il y a de machines sur le réseau.
Pour simuler ce traitement j'utilise un backgroundworker.
Dans la gestion du bouton j'appele le background worker :
Simulation de la tâche : execution des scripts distants et récupération des fichiers générés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub bouton( .... ) ' je récupère la liste des machines distantes dite "online" dans une liste ' puis je créer une progress bar Me.pgb = new progressBar ' nom du form contenant la progress bar Me.pgb.Visible = True If Not Me.bgworker.IsBusy Then Me.bgworker.RunWorkerAsync(list) End If end sub
Traitement de l'actualisation de la barre de progression :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 private sub bgworker_DoWork() ' liste contenant les IPs Dim machines As List(Of String) = e.Argument For i As Integer = 0 To (machines.Count - 1) bgworker.ReportProgress(i) Dim machine As New machine(machines(i)) Thread.Sleep(1) Next ' e.result = liste de fichiers générés sur chaque machine distante If bgworker.IsBusy Then If bgworker.WorkerSupportsCancellation Then bgworker.CancelAsync() End If End If end sub
Traitement lorsque le backgroundworker est terminé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub bgworker_ProgressChanged( ...) Me.pgb.progress_bar.Value = e.ProgressPercentage + 1 Me.pgb.label_count.Text = Me.pgb.progress_bar.Value End Sub
J'ai plusieurs questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub bgworker_RunWorkerCompleted(....) Me.pgb.progress_bar.Value = Me.pgb.progress_bar.Maximum ' mise à jour du tableau avec les données des machines distantes ' dgv = directcast(e.result,collection_de_fichier) End Sub
Premièrement en qui concerne la gestion de l'execution du script distant et de la récupération des fichiers généres. Est-ce que la méthode que j'utilise est correcte ? (je céer un objet "machine" qui va se charger pour chaque machine de l'exécution du script et de copier le fichier de la machine distante sur la machine locale) .
Est-ce que de tout gérer dans un seul Thread est correct ou c'est plus performant de gérer un thread par machine distante ?
Pour la barre de progression (valeure max=100), en simulant le traitement j'obtiens un résulat assez satisfaisant. C'est à dire que si j'ai 5 machines, ma barre progresse de 5 puis arrivé à 5 continue jusqu'à atteindre la fin.
Cependant j'ai un comportement que je ne comprend pas.
1) je lance mon application
2) clique sur le bouton pour simuler l'execution du script distant :
-----> La barre de progression s'affiche mais se bloque pendant +/- 15 secondes avant de commencer à défiler, puis s'incrémente de 1 jsuqu'au nombre total de machines.
Je ne comprend pas les raisons pour lesquelles la barre de progression se met en attente pendant une "longue" durée de +/- 15 secondes avant de défiler.
3) pour tester à nouveau je reclique sur le bouton pour simuler à nouveau l'exécution du script. Et là, je n'est pas de temps d'attente. La barre de progression démarre bien et se termine correctement.
Merci pour votre aide !
Partager