2015-01-27 1 views
0

Я сделал код, способный загружать значения на веб-странице, и он работает хорошо. Поскольку значения берутся в режиме реального времени, то есть загрузка данных выполняется только тогда, когда есть фактические изменения, мне нужно, если определенное значение изменено. Затем я создал код, который позволяет мне проверять все элементы массива с обновленными значениями и массив со старыми значениями. Код действительно определяет, когда данный результат изменился, но по какой-то странной причине сообщение кажется бесконечным, как будто оно застряло в форе, которое не принимает аргументов, и это очень странно.Проверка кода в петле не работает должным образом

For Each abc As Country_Data In lista 
       For Each xyz As Country_Data In vecchia_lista 
        If abc.casa = xyz.casa And abc.ospite = xyz.ospite Then 
         If abc.Result <> xyz.Result Then 
          MsgBox(abc.casa & " - " & abc.ospite & " -- " & abc.Result) 
          Exit For 
         End If 
        End If 
       Next 
      Next 

Определение переменных

Dim lista As New List(Of Country_Data) 
    Dim vecchia_lista As New List(Of Country_Data) 
    Private Structure Country_Data 
     Dim casa As String 
     Dim ospite As String 
     Dim Result As String 
    End Structure 

, как это исправить?

+1

«сообщение кажется бесконечным, как будто оно застряло в форе, которое не принимает аргументов» - не могли бы вы прояснить это? –

+0

В том смысле, что сообщение должно появляться только один раз, что точно указывает, изменился ли результат «x» или нет. В этом случае это бесконечно, как и для (0;) – Debug

ответ

0

Основываясь на ваших комментариях, я собираюсь, чтобы вы только когда-либо хотели видеть одно окно сообщения, когда оно обнаруживает первый случай, когда результат изменился (хотя после этого могли быть и другие).

Вы используете только выходы из внутренней петли For, и поэтому внешняя петля For продолжает цикл, что, вероятно, является тем, что вы наблюдаете.

Вы можете сделать что-то вроде этого:

Dim keepLooping As Boolean = True 

For Each abc As Country_Data In lista 
    For Each xyz As Country_Data In vecchia_lista 
     If abc.casa = xyz.casa And abc.ospite = xyz.ospite Then 
      If abc.Result <> xyz.Result Then 
       MsgBox(abc.casa & " - " & abc.ospite & " -- " & abc.Result) 
       keepLooping = False 
       Exit For 
      End If 
     End If 
    Next 

    If (Not keepLooping) Then Exit For 
Next 

Таким образом, если вы хотите, чтобы остановить цикл, он установит булев флаг и будет наблюдаться внешним контуром, заставляя его выход, а также.

+0

Прошу прощения, но я не понимаю. –

+0

Кажется, что он работает хорошо, даже если сообщение появляется через несколько секунд. Вы считаете, что если я добавлю «lista.clear()» сразу после печати, сообщение решит ситуацию? – Debug

+0

Сообщение не должно появляться снова. Вы должны делать что-то еще, что вы здесь не показываете. –

Смежные вопросы