Attendre.5 secondes avant de poursuivre le code VB.net
j'ai un code et je veux qu'il attende quelque part au milieu avant d'aller de l'avant. Après le WebBrowser1.Document.Fenêtre.DomWindow.execscript ("checkpasswordconfirmm ();", " JavaScript") Je veux attendre .5 secondes et ensuite faire 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
7 réponses
Vous aurez besoin d'utiliser Système.Le filetage.Fil.Sommeil(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
je pense que cette question Est ancienne mais je donne une autre réponse parce qu'elle est utile pour les autres:
thread.sommeil n'est pas une bonne méthode pour l'attente, parce que d'habitude, il gèle le logiciel jusqu'à la finition de son temps, cette fonction est mieux:
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, cependant augmente l'utilisation du CPU, mais la fonction ci-dessous non seulement ne gèle pas le logiciel, mais n'augmente pas non plus le CPU d'utilisation:
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
créer un timer, qui active le code que vous voulez quand il coche. Assurez-vous que la première ligne du code de la minuterie est:
timer.enabled = false
remplacer la minuterie par ce que vous avez appelé votre minuterie.
puis 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
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+ forte utilisation de cpu + Aucun retard
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 utilisation cpu + décalage important
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
j'ai eu de meilleurs résultats en vérifiant les navigateurs readystate avant de continuer à l'étape suivante. Cela ne fera rien jusqu'à ce que le navigateur ait un readystate "complet"
Do While WebBrowser1.ReadyState <> 4
''' put anything here.
Loop
VB.net Framework 4.0 Code:
Threading.Thread.Sleep(5000)
l'entier est en millisecondes (1 seconde = 1000 milisecondes)
j'ai fait le test et cela fonctionne