[VB.net] instruction non effectuée dans une boucle
tete2chat
-
InformatiWeb Messages postés 1776 Statut Membre -
InformatiWeb Messages postés 1776 Statut Membre -
Bonjour,
j'ai un soucis avec le "Label2.Text = ip" qui doit s'afficher à chaque boucle
hors le seul moyen que j'ai trouvé pour le faire c'est de rajouter cette "msgbox"
quand la msgbox est commentaire ca ne marche pas
quand la msgbox est active ca marche dans la msgbox et dans le label2 !
je comprends rien
MERCI
j'ai un soucis avec le "Label2.Text = ip" qui doit s'afficher à chaque boucle
hors le seul moyen que j'ai trouvé pour le faire c'est de rajouter cette "msgbox"
quand la msgbox est commentaire ca ne marche pas
quand la msgbox est active ca marche dans la msgbox et dans le label2 !
je comprends rien
Dim ip As String
Dim numero As String
Dim host As String
For compteur As Integer = 1 To 30
numero = compteur
ip = "192.168.0." + numero
Label2.Text = ip
'MsgBox(ip)
If My.Computer.Network.Ping(ip) Then
host = host & vbNewLine & ip
End If
Label3.Text = host
Next
MERCI
A voir également:
- [VB.net] instruction non effectuée dans une boucle
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Smart tv qui s'allume et s'éteint en boucle - Forum Téléviseurs
1 réponse
c'est un problème de multi threading.
Vu que ton traitement est long, tant que ton programme est dans sa boucle, le processus d'affichage ne sait pas travailler et donc il n'arrive pas a te montrer la modification du label 2.
Lorsque tu met ta msgbox, le programme se met en pause tant que ta msgbox n'est pas fermée. Il t'ouvre donc ta msgbox avec ta valeur mais la suite ne se fera que lorsque cette petite fenêtre sera fermée.
Vu que ton traitement est long, tant que ton programme est dans sa boucle, le processus d'affichage ne sait pas travailler et donc il n'arrive pas a te montrer la modification du label 2.
Lorsque tu met ta msgbox, le programme se met en pause tant que ta msgbox n'est pas fermée. Il t'ouvre donc ta msgbox avec ta valeur mais la suite ne se fera que lorsque cette petite fenêtre sera fermée.
Attention, ça peut être difficile à comprendre au début :
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load ' Lance un sous-processus Dim t As New System.Threading.Thread(AddressOf sous_processus) t.Start() End Sub ' Cette méthode (ou fonction) est effectuée par le sous-processus ' Tu dois donc faire un Invoke du label a modifier car dans le cas contraire ' tu auras une erreur : ' Opération inter-threads non valide : le contrôle a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il à été crée Private Sub sous_processus() Dim ip As String Dim numero As String Dim host As String = "" For compteur As Integer = 1 To 30 numero = compteur ip = "192.168.1." + numero MAJ_inter_thread(Label2, ip) 'MsgBox(ip) If My.Computer.Network.Ping(ip) Then host = host & vbNewLine & ip End If MAJ_inter_thread(Label3, host) Next End Sub ' Ceci permet de faire une modification "thread safe" sur des labels, ... Private Delegate Sub _MAJ_inter_thread(label As Label, ByVal valeur As String) Private Sub MAJ_inter_thread(label As Label, ByVal valeur As String) If Label2.InvokeRequired Then Dim d As New _MAJ_inter_thread(AddressOf MAJ_inter_thread) Me.Invoke(d, New Object() {label, valeur}) Exit Sub End If ' Modifie le texte du label passé en paramètre label.Text = valeur End Sub