2013-04-07 154 views
17

我有一段代码,我希望它在继续前进之前在中间的某处等待。 之后WebBrowser1.Document.Window.DomWindow.execscript(“checkPasswordConfirm();”,“JavaScript”) 我希望它等了0.5秒,然后做其余的代码。在继续执行代码之前等待0.5秒VB.net

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 
+2

你怎么知道这将是足够长的时间? – 2013-04-07 10:43:36

+0

因为我测试过它。这似乎够用了,但是当java脚本函数完成时会更好。 – koolboy5783 2013-04-12 02:20:12

+3

如果我的互联网连接速度较慢怎么办?或者我的电脑的JavaScript解释器?我的观点是,假设一个特定的时间值很少是一个好的解决方案。当然不是一个强大的。 – 2013-04-12 04:26:18

回答

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 
29

你需要使用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

每当我这样做,程序首先冻结,然后它执行代码。 – koolboy5783 2013-04-11 21:40:26

+0

我知道。你有两个选项,要么冻结线程,要么使用定时器(chipperyman573的建议)... – Sam 2013-04-12 08:35:17

+0

我在一个VB.NET winform应用程序上使用,这不会导致我的程序崩溃。我正在等待SQL更新完成,但像@Neolisk提到的那样,事件处理可能是解决这个问题的最好方法。想想我可能需要创建一个问题来解决这个问题,因为我目前没有看到任何发布在StackOverflow上的问题。 – eniacAvenger 2014-09-25 17:36:19

-3

VB.net 4.0框架 代码:

Threading.Thread.Sleep(5000)

的整数是在毫秒(1秒= 1000毫秒)

我做测试,它工作

+1

另一个答案已经说明这一点,OP说它不能帮助他... – 2014-06-24 16:12:39

4

我觉得这个问题很老,但我提供了另一个答案,因为它对其他人有用:

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

相关问题