web-dev-qa-db-ja.com

コードVB.netを続行する前に0.5秒待つ

私はコードを持っているので、先に進む前に真ん中のどこかで待ってほしい。 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
20
koolboy5783

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
39
Sam

私はこの質問は古いと思いますが、他の人にとって役に立つので別の答えを提供します:

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
8
Ali

タイマーを作成します。タイマーが作動すると、必要なコードがアクティブになります。タイマーのコードの最初の行が以下であることを確認してください。

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
Jon
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使用率+高遅延

2
ömer özer

提案されたコードには欠陥があります。

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()は、真夜中からの秒数を返します。これが真夜中の直前に呼び出された場合、休憩はほぼ丸1日となります。次のことをお勧めします。

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

DoEventsが呼び出されるため、waitloopをキャンセルする必要がある場合、BreakConditionをtrueに設定できます。これはループ外から実行できます。

0
FroschMeat

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

完璧に働きました。

0
user870036
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
0
ibrahim.alzein

次のステップに進む前に、ブラウザの準備状態を確認することで、より良い結果が得られました。ブラウザが「完全な」準備完了状態になるまで、これは何もしません

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