web-dev-qa-db-fra.com

Attendez 0,5 seconde avant de continuer le code VB.net

J'ai un code et je veux attendre quelque part au milieu avant d'aller de l'avant . Après WebBrowser1.Document.Window.DomWindow.execscript ("checkPasswordConfirm ();", "JavaScript") .__ attendre 0,5 seconde puis faites le reste du code.

    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
19
koolboy5783

Vous devrez utiliser System.Threading.Thread.Sleep (nombre de millisecondes) .

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
36
Sam

Je pense que cette question est ancienne mais je donne une autre réponse car elle est utile pour les autres:

thread.sleep n'est pas une bonne méthode pour attendre, car habituellement, le logiciel est figé jusqu'à la fin du temps imparti, cette fonction est meilleure:

   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

cette fonction attend un temps spécifique sans geler le logiciel, mais augmente l'utilisation du processeur, mais la fonction ci-dessous non seulement ne gèle pas le logiciel, mais n'augmente pas non plus l'utilisation du processeur:

    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
6
Ali

Faites une minuterie, qui active le code que vous voulez quand il coche. Assurez-vous que la première ligne du code du minuteur est:

timer.enabled = false

Remplacez la minuterie par ce que vous avez nommé votre minuterie.

Ensuite, utilisez ceci dans votre code:

   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
4
Jon
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 + utilisation élevée du processeur + pas de décalage

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

% 0,1 cpu utilisation + retard élevé

2
ömer özer
Static tStart As Single, tEnd As Single, myInterval As Integer
myInterval = 5 ' seconds
tStart = VB.Timer()
tEnd = myInterval + VB.Timer()
Do While tEnd > tStart
    Application.DoEvents()
    tStart = VB.Timer()
Loop
0
ibrahim.alzein

J'ai obtenu de meilleurs résultats en vérifiant l'état de lecture du navigateur avant de passer à l'étape suivante. Cela ne fera rien tant que le navigateur n'aura pas un état de lecture "complet"

Do While WebBrowser1.ReadyState <> 4
''' put anything here. 
Loop
0
Ricardo Mendoza