Foros del Web » Programación para mayores de 30 ;) » .NET »

vb.Net ejecutar acciones al finalizar un loop for each y no antes.

Estas en el tema de vb.Net ejecutar acciones al finalizar un loop for each y no antes. en el foro de .NET en Foros del Web. Hola, La verdad no entiendo porque sucede esto, desde hace muy poco que estoy programando en vb.net (advierto que mis conocimientos de programación no son ...
  #1 (permalink)  
Antiguo 24/07/2015, 09:27
 
Fecha de Ingreso: agosto-2007
Ubicación: Santiago de Chile
Mensajes: 67
Antigüedad: 16 años, 7 meses
Puntos: 1
vb.Net ejecutar acciones al finalizar un loop for each y no antes.

Hola,
La verdad no entiendo porque sucede esto, desde hace muy poco que estoy programando en vb.net (advierto que mis conocimientos de programación no son muy acabados o pulcros)

Les comento, cree una funcion publica en la que existe un loop for each, que analiza los elementos html de una url.

Código:
Public Function ReadGroupList()
        Dim htmlcollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("a")

        For Each anchorGroup As HtmlElement In htmlcollection
            Dim GroupCheck As String
            Dim GroupDetected As String
            Dim GroupDetectedDos As String

            GroupCheck = anchorGroup.GetAttribute("href")
            GroupDetected = Microsoft.VisualBasic.Left(GroupCheck, 32)
            GroupDetectedDos = Microsoft.VisualBasic.Left(GroupCheck, 33)

            If (GroupDetected = "https://www.facebook.com/groups/" And GroupDetectedDos <> "https://www.facebook.com/groups/?") Then
                Dim GroupUrl As String = GroupCheck
                Dim Delimitador_B As String = "?ref=bookmarks"

                GroupUrl = Split(GroupUrl, Delimitador_B, , CompareMethod.Text)(0)
                TextBox5.Text = TextBox5.Text & GroupUrl & Environment.NewLine
            End If
        Next
    End Function
y luego tengo un boton que acciona esta función, mi idea es que al finalizar la recopilacion de datos, y al finalizar completamente la función, exista un msgbox que indique que el proceso finalizo.

Código:
Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim GroupsUrlBrowser As String


        If WebBrowser1.Url() = New Uri("https://www.facebook.com/bookmarks/groups?exist") Then

            ReadGroupList()
            Label7.Text = ""
            MsgBox("Finished")
        End If

    End Sub
está acción se realiza sólo si se accede a una url Especifica.

El PROBLEMA es que el msgbox aparece al menos 4 veces, por lo que deduzco que el loop no ha finalizado.

alguna ayuda para resolver esto ?

Atte
Isaac Escobar
  #2 (permalink)  
Antiguo 24/07/2015, 10:17
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: vb.Net ejecutar acciones al finalizar un loop for each y no antes.

Aqui tienes el motivo.

Lo que dice el documento enlazado es que por cada frame que tiene la página (o si se autorefrescan con ajax es posible que pudiese pasar también), vas a obtener un nuevo evento de DocumentCompleted y por lo tanto se volverá a ejecutar tu código.

Si miras el enlace que te he puesto te indican como solucionar tu problema. Te dejo que lo leas y le des una vuelta a ver que tal ;)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 24/07/2015, 10:29
 
Fecha de Ingreso: agosto-2007
Ubicación: Santiago de Chile
Mensajes: 67
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: vb.Net ejecutar acciones al finalizar un loop for each y no antes.

Malenko,
Gracias, encontré este código también que me sirvió mas.
Código:
Private Sub WebBrowser1_DocumentCompleted(
    ByVal sender As Object,
    ByVal e As WebBrowserDocumentCompletedEventArgs
) Handles WebBrowser1.DocumentCompleted
        If Me.WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
            MsgBox("completely loaded")
        End If
    End Sub

pero tengo una duda que me esta matando y es como es que se usa esta función.
ya que hay varios procesos que necesitan que el navegador termine de cargar las paginas.

se hace una funcion igual para cada proceso que necesite en medio del programa ?
  #4 (permalink)  
Antiguo 25/07/2015, 13:47
 
Fecha de Ingreso: marzo-2013
Mensajes: 25
Antigüedad: 11 años
Puntos: 0
Respuesta: vb.Net ejecutar acciones al finalizar un loop for each y no antes.

Probaste con End Class

???

Etiquetas: acciones, finalizar, loop, vb, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:19.