2013-04-07 30 views
17

Ho un codice e voglio che attenda da qualche parte nel mezzo prima di andare avanti. Dopo il WebBrowser1.Document.Window.DomWindow.execscript ("checkPasswordConfirm();", "JavaScript") Desidero attendere 0,5 secondi e quindi eseguire il resto del codice.Attendi .5 secondi prima di continuare il codice VB.net

WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript") 

    Dim allelements As HtmlElementCollection = WebBrowser1.Document.All 
    For Each webpageelement As HtmlElement In allelements 
     If webpageelement.InnerText = "Sign Up" Then 
      webpageelement.InvokeMember("click") 
     End If 
    Next 
+2

Come fai a sapere che sarà abbastanza a lungo? –

+0

Perché l'ho provato. E quello sembra abbastanza, ma un quando la funzione di script java completa sarebbe meglio. – koolboy5783

+3

Cosa succede se la mia connessione Internet è più lenta? O l'interprete JavaScript del mio computer? Il mio punto è, supponendo che un particolare valore temporale sia raramente una buona soluzione. Certamente non robusto. –

risposta

4

Crea un timer, che attiva qualunque codice desideri quando fa tic tac. Assicurati che la prima riga del codice del timer sia:

timer.enabled = false 

Sostituisci il timer con quello che hai chiamato il tuo timer.

quindi utilizzare questo nel codice:

WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript") 
timer.enabled = true 
Dim allelements As HtmlElementCollection = WebBrowser1.Document.All 
For Each webpageelement As HtmlElement In allelements 
    If webpageelement.InnerText = "Sign Up" Then 
     webpageelement.InvokeMember("click") 
    End If 
Next 
29

avrete bisogno di utilizzare System.Threading.Thread.Sleep(number of milliseconds).

WebBrowser1.Document.Window.DomWindow.execscript("checkPasswordConfirm();","JavaScript") 

Threading.Thread.Sleep(500) ' 500 milliseconds = 0.5 seconds 

Dim allelements As HtmlElementCollection = WebBrowser1.Document.All 
For Each webpageelement As HtmlElement In allelements 
    If webpageelement.InnerText = "Sign Up" Then 
     webpageelement.InvokeMember("click") 
    End If 
Next 
+1

Ogni volta che lo faccio, il programma si blocca prima, e poi fa il codice. – koolboy5783

+0

Lo so. Avete due opzioni, o congelate il thread, o usate un timer (suggerimento di chipperyman573) ... – Sam

+0

Sto usando un'applicazione winform VB.NET e questo non causa il crash del mio programma.Sto aspettando il completamento di un aggiornamento SQL, ma come menzioni @Neolisk, la gestione degli eventi è probabilmente il modo migliore per farlo. Penso che potrebbe essere necessario creare una domanda per affrontare questo dato che non vedo alcun post pubblicato su StackOverflow al momento. – eniacAvenger

-3

VB.net 4.0 quadro Codice:

Threading.Thread.Sleep(5000)

L'intero è in millisecondi (1 sec = 1000 millisecondi)

ho fatto provare e funziona

+1

un'altra risposta già lo afferma e OP dice che non lo aiuta ... –

4

Penso che questa domanda sia vecchia ma fornisco un'altra risposta perché è utile per gli altri:

Thread.sleep non è un buon metodo per l'attesa, perché di solito si blocca il software fino a terminare il suo tempo, questa funzione è meglio:

Imports VB = Microsoft.VisualBasic 

    Public Sub wait(ByVal seconds As Single) 
    Static start As Single 
    start = VB.Timer() 
    Do While VB.Timer() < start + seconds 
     System.Windows.Forms.Application.DoEvents() 
    Loop 
End Sub 

questa funzione attesa per tempo specifico senza congelare il software , tuttavia aumenta l'utilizzo della CPU, ma al di sotto funzione non solo non congelare il software, ma anche non aumenta l'utilizzo della CPU:

Private Sub wait(ByVal seconds As Integer) 
    For i As Integer = 0 To seconds * 100 
     System.Threading.Thread.Sleep(10) 
     Application.DoEvents() 
    Next 
End Sub 
1
Imports VB = Microsoft.VisualBasic 

Public Sub wait(ByVal seconds As Single) 
    Static start As Single 
    start = VB.Timer() 
    Do While VB.Timer() < start + seconds 
     System.Windows.Forms.Application.DoEvents() 
    Loop 
End Sub 

% 20 + elevato utilizzo della CPU + nessun ritardo

Private Sub wait(ByVal seconds As Integer) 
    For i As Integer = 0 To seconds * 100 
     System.Threading.Thread.Sleep(10) 
     Application.DoEvents() 
    Next 
End Sub 

% l'utilizzo della CPU 0.1 + alta lag

Problemi correlati