Подождите 0,5 секунды, прежде чем продолжить код VB.net
У меня есть код, и я хочу, чтобы он подождал где-то посередине, прежде чем идти вперед.
После WebBrowser1.Document.Window.DomWindow.execscript( "checkPasswordConfirm();", "JavaScript" )
Я хочу, чтобы он подождал 0,5 секунды, а затем остальной код.
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
Ответы
Ответ 1
Вам нужно будет использовать System.Threading.Thread.Sleep(количество миллисекунд).
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
Ответ 2
Я думаю, что этот вопрос старый, но я даю другой ответ, потому что он полезен другим:
thread.sleep не является хорошим методом ожидания, потому что обычно он замораживает программное обеспечение до окончания своего времени, эта функция лучше:
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
эта функция ждет определенное время без замораживания программного обеспечения, однако увеличивает использование ЦП, но ниже функция не только не затормозит программное обеспечение, но также не увеличивает использование ЦП:
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
Ответ 3
Сделайте таймер, который активирует любой код, который вы хотите, когда он тикает. Убедитесь, что первая строка в коде таймера:
timer.enabled = false
Замените таймер тем, что вы назвали своим таймером.
Затем используйте это в своем коде:
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
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 + использование высокоскоростного процессора + отсутствие отставания
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 использование + высокий лаг
Ответ 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
Ответ 6
Я добился лучших результатов, проверив состояние браузера до перехода к следующему шагу. Это ничего не изменит, пока браузер не получит "готовое" состояние готовности
Do While WebBrowser1.ReadyState <> 4
''' put anything here.
Loop
Ответ 7
Проблема с Threading.Thread.SLeep(2000)
заключается в том, что он сначала выполняется в моей программе VB.Net. это
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
работал без нареканий.
Ответ 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
VB.Timer() возвращает секунды с полуночи. Если это называется незадолго до полуночи, перерыв будет почти полный день. Я бы предложил следующее:
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 может быть установлен в true, когда цикл ожидания должен быть отменен при вызове DoEvents, это можно сделать вне цикла.
Ответ 9
VB.net
4.0
Код:
Threading.Thread.Sleep(5000)
Целое число находится в миллисекундах (1 сек = 1000 миллисекунд)
Я тестировал его, и он работает