VB 2010 - я получаю результаты в конце цикла, а не во время - PullRequest
1 голос
/ 05 ноября 2011

Я использую 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 & TimeValue(Now) & " Checking ..." & name & "(" & ip & ") ..........."

    If sendPing(ip) Then
        Me.Controls(lbl).BackColor = Color.Green
        rtbLog.Text = rtbLog.Text & "success" & vbCrLf
    Else
        Me.Controls(lbl).BackColor = Color.Red
        rtbLog.Text = rtbLog.Text & "Failed" & 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 Ответ

0 голосов
/ 05 ноября 2011

вы должны обновить интерфейс внутри цикла.т.е. после звонка checkUnitStatus

   checkUnitStatus(name, lbl, ip) 
   Me.Controls(lbl).Refresh()
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...