#vb.net #loops
#vb.net #циклы
Вопрос:
Я использую VB 2010 Express. У меня есть цикл, который вызывает функцию с именем «singlePing», которая выполняет пинг IP-адреса. Если приложению удалось достичь этого IP, оно возвращает определенный цвет метки в зеленый, в противном случае — красный. (Для каждого IP-адреса есть метка)
Когда я запускаю свое приложение, кажется, что мое приложение «застряло» (на самом деле оно запускает этот цикл), и через некоторое время оно обновляет задний цвет ВСЕХ ЯРЛЫКОВ сразу.
Почему он не обновляет каждую метку одновременно? Это заставляет «пользователя» думать, что приложение застряло. Вот мой код:
Private Sub btnActivateMonitor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnActivateMonitor.Click
Dim xmldoc As New XmlDataDocument()
Dim xmlnode As XmlNodeList
Dim fs As New FileStream(acXmlFileName, FileMode.Open, FileAccess.Read)
Dim i As Integer
Dim name As String
Dim lbl As String
Dim ip As String
xmldoc.Load(fs)
xmlnode = xmldoc.GetElementsByTagName("Unit")
For i = 0 To xmlnode.Count - 1
name = xmlnode(i).ChildNodes.Item(0).InnerText.Trim()
lbl = xmlnode(i).ChildNodes.Item(1).InnerText.Trim()
ip = xmlnode(i).ChildNodes.Item(2).InnerText.Trim()
checkUnitStatus(name, lbl, ip)
Next
End Sub
Sub checkUnitStatus(ByVal name As String, ByVal lbl As String, ByVal ip As String)
rtbLog.Text = rtbLog.Text amp; TimeValue(Now) amp; " Checking ..." amp; name amp; "(" amp; ip amp; ") ..........."
If sendPing(ip) Then
Me.Controls(lbl).BackColor = Color.Green
rtbLog.Text = rtbLog.Text amp; "success" amp; vbCrLf
Else
Me.Controls(lbl).BackColor = Color.Red
rtbLog.Text = rtbLog.Text amp; "Failed" amp; vbCrLf
End If
End Sub
' --------------------------------------
'| Send Ping (ip)
' --------------------------------------
Function sendPing(ByVal ip As String)
Dim reachable As Boolean = False
Try
reachable = My.Computer.Network.IsAvailable AndAlso _
My.Computer.Network.Ping(ip, 10000)
Catch pingException As System.Net.NetworkInformation.PingException
Catch genericNetworkException As System.Net.NetworkInformation.NetworkInformationException
' Fail silently and return false
End Try
Return reachable
End Function
Ответ №1:
вы должны обновить пользовательский интерфейс внутри цикла. т.е. после вызова checkUnitStatus
checkUnitStatus(name, lbl, ip)
Me.Controls(lbl).Refresh()
Next