等待.5秒,然后继续代码VB.net

时间:2013-04-07 01:25:10

标签: vb.net wait

我有一个代码,我希望它能在中间的某个地方继续前进。 WebBrowser1.Document.Window.DomWindow.execscript(“checkPasswordConfirm();”,“JavaScript”)之后 我希望它等待.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

11 个答案:

答案 0 :(得分:38)

您需要使用System.Threading.Thread.Sleep(number of milliseconds)

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

答案 1 :(得分:7)

我认为这个问题已经过时但我提供了另一个答案,因为它对其他人有用:

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

此函数在没有冻结软件的情况下等待特定时间,但会增加CPU使用率,但是以下功能不仅不会冻结软件,而且也不会增加CPU使用率:

    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

答案 2 :(得分:4)

制作一个计时器,它可以激活你想要的任何代码。确保计时器代码中的第一行是:

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

答案 3 :(得分:2)

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 +高CPU使用率+无滞后

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使用率+高滞后

答案 4 :(得分:0)

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

答案 5 :(得分:0)

通过在继续下一步之前检查浏览器的就绪状态,我得到了更好的结果。这将不起作用,直到浏览器具有“完整”的就绪状态

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

答案 6 :(得分:0)

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

工作无懈可击。

答案 7 :(得分:0)

建议的代码有缺陷:

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

当应该取消waitloop时,可以将BreakCondition设置为true,因为调用DoEvents可以从循环外部完成。

答案 8 :(得分:0)

另一种方法是使用System.Threading.ManualResetEvent

dim SecondsToWait as integer = 5
Dim Waiter As New ManualResetEvent(False)
Waiter.WaitOne(SecondsToWait * 1000) 'to get it into milliseconds

答案 9 :(得分:0)

在Web应用程序中,计时器将是最好的方法。

仅供参考,在桌面应用程序中,我会在异步方法中使用它。

... 
Await Task.Run(Sub()
    System.Threading.Thread.Sleep(5000)
End Sub)
...

它对我有用,重要的是它不会冻结整个屏幕。但这又是在桌面上,我尝试在Web应用程序中将其冻结。

答案 10 :(得分:-3)

VB.net 4.0框架 代码:

Threading.Thread.Sleep(5000)

整数以毫秒为单位(1秒= 1000毫秒)

我测试过它并且有效