Подождите 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 миллисекунд)

Я тестировал его, и он работает