Hallo zusammen,
mit dem folgenden Code befülle ich im MainForm Load Event ein Treeview mit einem Root Node und mehreren Child Nodes. Mit dem Button btnPing durchlaufe ich die Nodes und suche Child Nodes mit Level 2. Diese Nodes werden dann mit My.computer.network.ping abgefragt und der ForeColor des Child Node wird dann je nach Ergebnis rot oder grün eingefärbt. Das ganze klappt auch. Allerdings friert mir das GUI jedesmal dabei ein.
Jetzt möchte ich das ganze so umbauen das der Ping in einem separatem Thread abläuft. Jetzt habe ich nur eine Verständnisfrage zum Ablauf. Kann ich einen Thread mit Parameterübergabe starten? Dann würde ich durch die Liste laufen und bei jeder Node mit Level 2 einen Thread starten und auf Rückmeldung warten. Wie wäre hier die beste Vorgehensweise?
Vielen Dank im Voraus
Gruß Kay
mit dem folgenden Code befülle ich im MainForm Load Event ein Treeview mit einem Root Node und mehreren Child Nodes. Mit dem Button btnPing durchlaufe ich die Nodes und suche Child Nodes mit Level 2. Diese Nodes werden dann mit My.computer.network.ping abgefragt und der ForeColor des Child Node wird dann je nach Ergebnis rot oder grün eingefärbt. Das ganze klappt auch. Allerdings friert mir das GUI jedesmal dabei ein.
VB.NET-Quellcode
- '### TreeView Test
- Option Explicit On
- Option Strict On
- Public Partial Class MainForm
- Public Sub New()
- Me.InitializeComponent()
- End Sub
- '### Hauptprogramm wird geladen ###
- Sub MainFormLoad(sender As Object, e As EventArgs)
- 'Treeview befüllen
- With treeView1
- .Nodes.Add("Test1")
- .Nodes(0).Nodes.Add("Test1_a")
- .Nodes(0).Nodes.Add("Test1_b")
- .Nodes(0).Nodes.Add("Test1_c")
- .Nodes(0).Nodes(0).Nodes.Add("10.23.59.1")
- .Nodes(0).Nodes(1).Nodes.Add("10.23.59.90")
- .Nodes(0).Nodes(1).Nodes.Add("10.23.59.90")
- .Nodes(0).Nodes(2).Nodes.Add("10.23.59.10")
- .Nodes(0).Nodes(2).Nodes.Add("10.23.59.11")
- .Nodes(0).Nodes(2).Nodes.Add("10.23.59.12")
- .Nodes(0).Nodes(2).Nodes.Add("10.23.59.13")
- .Nodes(0).Nodes(2).Nodes.Add("10.23.59.14")
- End With
- 'Treeview aufklappen
- treeView1.ExpandAll
- End Sub
- '### Sub zum rekursiven durchsuchen der Nodes ###
- Private Sub RecurseNodes(ByVal col As TreeNodeCollection)
- For Each tn As TreeNode In col
- If tn.Level = 2 Then
- Try
- If My.Computer.Network.Ping(tn.Text) Then
- tn.ForeColor = Color.Green
- tn.StateImageIndex= 4
- Else
- tn.ForeColor = Color.Red
- tn.StateImageIndex=5
- End If
- Catch ex As Exception
- tn.ForeColor = Color.Red
- tn.StateImageIndex=5
- End Try
- End If
- If tn.Nodes.Count > 0 Then
- RecurseNodes(tn.Nodes)
- End If
- Next tn
- End Sub
- '### Button zum starten der rekursiven Suche ###
- Sub BtnPingClick(sender As Object, e As EventArgs)
- 'Treeview rekursiv durchsuchen
- RecurseNodes(treeView1.Nodes)
- End Sub
- End Class
Jetzt möchte ich das ganze so umbauen das der Ping in einem separatem Thread abläuft. Jetzt habe ich nur eine Verständnisfrage zum Ablauf. Kann ich einen Thread mit Parameterübergabe starten? Dann würde ich durch die Liste laufen und bei jeder Node mit Level 2 einen Thread starten und auf Rückmeldung warten. Wie wäre hier die beste Vorgehensweise?
Vielen Dank im Voraus
Gruß Kay