Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB.NET] Attendere caricamento pagina web

    Salve a tutti, ho già cercato sul forum ma non ho trovato una risposta.
    In pratica ho bisogno di aprire diverse pagine web, e per ogn'una eseguire delle operazioni.
    In un ciclo For faccio "navigare" il webbrowser, e nell'evento Download Completed eseguo le varie operazioni.

    codice:
     For i As Integer = 0 To n_pagine
                web.Navigate(pagine(i))
            Next
    purtroppo il codice contenuto nell'evento DownloadCompleted non viene mai eseguito, se non per l'ultima pagina, perchè il ciclo for non da il tempo al webbrowser di finire di caricare la pagina che già ne carica un'altra...
    In pratica, come posso fare per "mettere in pausa" il ciclo for e dare il tempo al webbrowser di caricare la pagina e di eseguire le operazioni? vorrei evitare di usare i timer se possibile...

    P.S. ho già provato con dei cicli iterativi controllando lo stato del webbrowser, ma senza successo..

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    La cosa migliore è eliminare la for e fare in modo che la prossima Navigate parta solo alla fine di tutte le operazioni che fai nell'evento Download Completed.

    P.S. Questa non è la sezione giusta per VB.NET
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da oregon
    P.S. Questa non è la sezione giusta per VB.NET
    Infatti. Sposto in "Visual Basic e .NET Framework".

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Chiedo scusa, non ho visto la sottocategoria..
    il problema è che non posso eliminare il for, dato che i link sono contenuti in un array e devo scorrerlo tutto..

  5. #5
    Ho eliminato il ciclo for mettendo una variabile che si incrementa ad ogni pagina visualizzata. L'evento DocumentCompleted viene evocato più volte, non solo alla fine, quindi ho risolto con un If sullo stato del controllo webbrowser, ma a volte capita che si blocca, nel senso che non va più avanti dopo un certo numero di pagine..

  6. #6
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Se analizzi il tuo ciclo For...più o meno è:
    [list=1][*]verifica un' espressione fra due variabili[*]in base al punto 1 esce dal ciclo o continua[*]esegue del codice[*]incrementa il valore della variabile "i" e ritorna a punto 1[/list=1]
    In pratica sarebbe il modo "automatizzato" di eseguire più routine, quindi aggiungi una variabile che funge da "contatore" (n_pagine? altrimenti c' è un' errore con l' indice...), una Sub che imposta a 0 il contatore e ne richiama un' altra con solo il navigate (web.Navigate(pagine(contatore))), al "DocumentCompleted" incrementi il contatore e con un IF verifichi se contatore è maggiore degli elementi dell' array(-1): se SI fermi altrimenti richiami la Sub con il "navigate".
    Ciao

    OOPS...letto che hai già fatto qualcosa di simile...

  7. #7
    Ciao Vinsent, grazie della risposta.. no provato il tuo consiglio, ma il webbrowser non naviga in tutte le pagine, si ferma dopo un numero imprecisato di volte.. forse sono io che non ho capito bene..

  8. #8
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da PeppeCap93
    Ciao Vinsent, grazie della risposta.. no provato il tuo consiglio, ma il webbrowser non naviga in tutte le pagine, si ferma dopo un numero imprecisato di volte.. forse sono io che non ho capito bene..
    "no provato"....
    "Navigate" lo hai inserito in un blocco Try/Catch?
    Vai di debug e console.writeline per vedere dove si ferma o posta il codice che hai scritto...
    Dovresti dare più informazioni altrimenti è difficile aiutarti.

  9. #9
    Scusami Vinsent, volevo scrivere "ho provato"
    Comunque finalmente ho risolto, era il blocco Try/Catch che mancava
    Posto il codice nel caso serve a qualcun'altro:
    codice:
    Public Class Form1
        Dim pagine As String() = New String() {"www.sito1.it","www.sito2.it","www.sito3.it"}
        Dim n_pagine As Integer = 3
        Dim indice = 0
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Try
                ' prova ad eseguire queste istruzioni
                WebBrowser1.Navigate(pagine(indice))
                indice = indice + 1
            Catch exc As Exception
                ' esegui queste istruzioni in caso di errore
                MsgBox("Errore")
            End Try
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If indice < n_pagine Then
                WebBrowser1.Navigate(pagine(indice))
                indice = indice + 1
            End If
        End Sub
    End Class

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.