Ik heb een code en ik wil dat deze ergens in het midden wacht voordat ik verder ga.
Na de WebBrowser1.Document.Window.DomWindow.execscript(“checkPasswordConfirm();”,”JavaScript”)
Ik wil dat het 0,5 seconden wacht en dan de rest van de code doet.
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
Antwoord 1, autoriteit 100%
U moet System.Threading.Thread.Sleep(aantal milliseconden).
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
Antwoord 2, autoriteit 22%
Deze vraag is oud, maar hier is nog een antwoord omdat het nuttig is voor anderen:
thread.sleepis geen goede methode om te wachten, omdat het meestal de software bevriest tot het einde van de tijd, deze functie is beter:
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
De bovenstaande functie wacht een bepaalde tijd zonder de software te bevriezen, maar verhoogt het CPU-gebruik.
Deze functie bevriest niet alleen de software, maar verhoogt ook niet het CPU-gebruik:
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
Antwoord 3, autoriteit 8%
Maak een timer die elke gewenste code activeert wanneer deze tikt. Zorg ervoor dat de eerste regel in de timercode is:
timer.enabled = false
Vervang de timer door hoe je je timer ook hebt genoemd.
Gebruik dit dan in je 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
Antwoord 4, autoriteit 8%
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+ hoog cpu-gebruik + geen vertraging
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-gebruik + hoge vertraging
Antwoord 5
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
Antwoord 6
Ik heb betere resultaten gehad door de gereedstatus van de browser te controleren voordat ik doorging naar de volgende stap. Dit zal niets doen totdat de browser een “complete” readystate heeft
Do While WebBrowser1.ReadyState <> 4
''' put anything here.
Loop
Antwoord 7
Het probleem met Threading.Thread.SLeep(2000)
is dat het als eerste wordt uitgevoerd in mijn VB.Net-programma. Dit
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
werkte foutloos.
Antwoord 8
De voorgestelde code bevat fouten:
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
VB.Timer() retourneert de seconden sinds middernacht. Als dit net voor middernacht wordt gebeld, is de pauze bijna een volledige dag.
Ik zou het volgende willen voorstellen:
Private Sub Wait(ByVal Seconds As Double, Optional ByRef BreakCondition As Boolean = False)
Dim l_WaitUntil As Date
l_WaitUntil = Now.AddSeconds(Seconds)
Do Until Now > l_WaitUntil
If BreakCondition Then Exit Do
DoEvents()
Loop
End Sub
BreakCondition kan worden ingesteld op true wanneer de waitloop moet worden geannuleerd zoals DoEvents wordt genoemd, dit kan van buiten de lus worden gedaan.
Antwoord 9
Een andere manier is om te gebruiken System.Threading.ManualResetEvent
dim SecondsToWait as integer = 5
Dim Waiter As New ManualResetEvent(False)
Waiter.WaitOne(SecondsToWait * 1000) 'to get it into milliseconds
Antwoord 10
In webapplicatie is een timer de beste benadering.
Typisch, in desktoptoepassing gebruik ik dit in plaats daarvan, binnen een asynchrone methode.
...
Await Task.Run(Sub()
System.Threading.Thread.Sleep(5000)
End Sub)
...
Het werkt voor mij, en belangrijker nog, het bevriest niet het hele scherm. Maar nogmaals, dit is op desktop, ik probeer in de webtoepassing dat het vastloopt.
Antwoord 11
VB.net
4.0 kader
Code :
Threading.Thread.Sleep(5000)
Het gehele getal is in milliseconden (1 sec = 1000 milliseconden)
Ik heb het getest en het werkt