VB Come fare attendere il form?

Stato
Discussione chiusa ad ulteriori risposte.

Kreatos

Utente Electrum
18 Dicembre 2008
151
44
1
147
Ragazzi c'è un modo oltre al timer per eseguire delle istruzioni dopo un tempo x, cioè che il form attende e poi esegue l'istruzione?
 
Ragazzi c'è un modo oltre al timer per eseguire delle istruzioni dopo un tempo x, cioè che il form attende e poi esegue l'istruzione?
BANG!
Comunque no non puoi far attendere il form, quello che dici non ha senso. Però puoi sospendere un thread del processo, dentro al quale ci sono le istruzioni che ti interessano.
Se il thread che vuoi sospendere è quello principale puoi usare la procedura Sleep come un metodo shared per fermarlo (Suspend per sospenderlo a tempo indeterminato). Altrimenti se si tratta di un'altro thread puoi utilizzare sempre il metodo Sleep su un'istanza della classe Thread: Metodo Sleep (TimeSpan)
 
e allora cos'è che vuoi fare? Hai detto che vuoi attendere un tempo x prima di eseguire le istruzioni, bhé il metodo sleep va benissimo. Altrimenti c'è il timer.
 
Ultima modifica:
Speed con il metodo sleep non mi funziona xkè nn mi attende, ma o blocca il form oppure mi da errore
Codice:
WebBrowser1.Navigate("link")
        Thread.Sleep(2000)
        WebBrowser1.Document.GetElementById("conferma").InvokeMember("click")
il problema e che quando metto lo sleep il webbrowser non mi carica la pagina e passa al click
 
Kreatos, magari se ti spieghi un po' meglio riusciamo a capire...
Da quanto leggo mi par ovvio che non sai cosa è un processo, cmq immagino devi attendere che la pagina sia completamente caricata prima di eseguire il click, perchè non è detto che 2 secondi bastano in termini assoluti.
percio' lavora dentro l'evento di download complete del controllo web browser.
puoi metterci una variabile true/false che fa attendere un ciclo while oppure inserire il codice direttamente nel download complete

---------- Post added at 14:28 ---------- Previous post was at 14:09 ----------

Bhe date le scarse informazioni, nel caso in cui non abbia intuito bene cosa devi fare, ti ho scritto una funzione che esegue una pausa di esecuzione senza "bloccare" l'esecuzione del programma.
Codice:
 Sub Pausa(ByVal Millisecondi As Long)
        Dim tick As Long
        tick = System.Environment.TickCount()
        Do
            Application.DoEvents()
        Loop Until tick + Millisecondi < System.Environment.TickCount()
    End Sub
'
 
il problema e che quando metto lo sleep il webbrowser non mi carica la pagina e passa al click

è ovvio. Lo sleep blocca (in questo caso) il thread chiamate, quindi anche il caricamento del WebBrowser che fa parte del thread. Allora, le soluzioni sono altre:
1- Timer (assurdo se devi aspettare il caricamento della pagina web)
2- Funzione di Predator (anche questo assurdo in questo caso comunque)
3- Thread separato. Viene avviato subito dopo la chiamata al metodo Navigate e poi usi il metodo sleep all'interno di questo secondo thread (anche questo assurdo se devi solo aspettare il caricamento della pagina)
4- Come ti ha già detto predator (anche se ha sbagliato nome dell'evento) puoi usare l'evento DocumentComplete della classe WebBrowser (vedi MSDN per maggiori informazioni). Questo è il modo migliore se devi attendere il caricamento della pagina.

P.S.: Dai un'occhiata a come funzionano i processi e i thread...almeno una conoscenza di livello base di questi argomenti devi averla.
 
Ma far attendere il form per cosa? :\
Ripeto: far attendere il Form è assurdo. Form e Thread sono due cose diverse. Quindi la domanda corretta sarebbe: Ma far attendere il thread per cosa?
Comunque, saper lavora con i threads è importantissimo. Ed è spesso molto utile mettere "in pausa" qualche thread per un determinato tempo. Gli scopi sono molteplici.

Per quanto riguarda il caso specifico di Kreatos, pare che voglia attendere il caricamento di una pagina web nel controllo WebBrowser prima di eseguire altre istruzioni.
 
far attende il thread per il caricamento della pagina, e non posso mettere questa funzione nel documentcompleted xkè prima il webbrowser deve navigare in altre pagine senza far nnt
 
far attende il thread per il caricamento della pagina, e non posso mettere questa funzione nel documentcompleted xkè prima il webbrowser deve navigare in altre pagine senza far nnt
Emh.... Controllare l'url per sapere in che pagina ti trovi? Utilizzare delle variabili che vengono settate su determinati valori in base alla pagina sulla quale stai navigando?
 
Stato
Discussione chiusa ad ulteriori risposte.