2013-04-07 152 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使用率+高滯後

相關問題