我有一个代码,我希望它能在中间的某个地方继续前进。 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
答案 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毫秒)
我测试过它并且有效