Wait .5 seconds before continuing code VB.net

后端 未结 11 676
长发绾君心
长发绾君心 2021-02-05 04:25

I have a code and I want it to wait somewhere in the middle before going forward. After the WebBrowser1.Document.Window.DomWindow.execscript(\"checkPasswordConfirm();\",\"JavaSc

相关标签:
11条回答
  • 2021-02-05 05:03
    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 讨论(0)
  • 2021-02-05 05:03

    The suggested Code is flawed:

    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() returns the seconds since midnight. If this is called just before midnight the break will be nearly a full day. I would suggest the following:

    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
    

    BreakCondition can be set to true when the waitloop should be cancelled as DoEvents is called this can be done from outside the loop.

    0 讨论(0)
  • 2021-02-05 05:04

    In web application a timer will be the best approach.

    Just fyi, in desktop application I use this instead, inside an async method.

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

    It work for me, importantly it doesn't freeze entire screen. But again this is on desktop, i try in web application it does freeze.

    0 讨论(0)
  • 2021-02-05 05:06

    Make a timer, that activates whatever code you want to when it ticks. Make sure the first line in the timer's code is:

    timer.enabled = false
    

    Replace timer with whatever you named your timer.

    Then use this in your code:

       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
    
    0 讨论(0)
  • 2021-02-05 05:08

    Another way is to use System.Threading.ManualResetEvent

    dim SecondsToWait as integer = 5
    Dim Waiter As New ManualResetEvent(False)
    Waiter.WaitOne(SecondsToWait * 1000) 'to get it into milliseconds
    
    0 讨论(0)
  • 2021-02-05 05:14
    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+ high cpu usage + no lag

    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 usage + high lag

    0 讨论(0)
提交回复
热议问题