2013-04-07 19 views
17

Mam kod i chcę, aby poczekał gdzieś w środku, przed pójściem do przodu. Po WebBrowser1.Document.Window.DomWindow.execscript ("checkPasswordConfirm();", "JavaScript") Chcę, aby czekać. 5 sekund, a następnie zrobić resztę kodu.Poczekaj .5 sekund przed kontynuowaniem kodu 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

Skąd wiesz, że będzie wystarczająco długo? –

+0

Ponieważ testowałem to. I wydaje się, że wystarczy, ale kiedy funkcja skryptu java zostanie ukończona, będzie lepiej. – koolboy5783

+3

Co się stanie, jeśli moje połączenie internetowe będzie wolniejsze? Czy mój interpreter JavaScript w moim komputerze? Chodzi mi o to, zakładając, że konkretna wartość czasu rzadko jest dobrym rozwiązaniem. Z pewnością nie jest solidny. –

Odpowiedz

4

Zrób zegar, który aktywuje dowolny kod, który chcesz, gdy tyka. Upewnij się, że pierwsza linia kodu timera to:

timer.enabled = false 

Wymień stoper na cokolwiek wymieniłeś zegar.

Wtedy to wykorzystać w kodzie:

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

Musisz użyć 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

Ilekroć to robię, program zawiesza się, a następnie wykonuje kod. – koolboy5783

+0

Wiem. Masz dwie opcje: albo zatrzymaj wątek, albo użyj zegara (sugestia chipperyman573) ... – Sam

+0

Używam aplikacji WinForm VB.NET i to nie powoduje awarii mojego programu.Czekam na aktualizację SQL, ale jak wspomniałem @Niskolisk, obsługa zdarzeń jest prawdopodobnie najlepszym sposobem na zrobienie tego. Pomyśl, może będę musiał utworzyć pytanie, aby rozwiązać ten problem, ponieważ nie widzę żadnych opublikowanych na StackOverflow w tej chwili. – eniacAvenger

-3

VB.net 4,0 ramy Kod:

Threading.Thread.Sleep(5000)

Liczba całkowita w milisekundach (1 s = 1000 milisekund)

I tak testowania i działa

+1

inna odpowiedź już to stwierdza, a OP mówi, że to mu nie pomaga ... –

4

Myślę, że to pytanie jest stare, ale zapewniam inną odpowiedź, ponieważ jest przydatna dla innych:

Thread.Sleep nie jest to dobra metoda dla oczekujących, ponieważ zwykle zamarza oprogramowanie aż kończąc swój czas, funkcja ta jest lepsza:

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 

ta funkcja oczekiwania na określony czas bez zamrażania oprogramowania jednak zwiększa obciążenie procesora, ale poniżej funkcji nie tylko nie zamarza oprogramowania, ale również nie zwiększa zużycia 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 + Wykorzystanie wysokiej cpu + nie 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 

% cpu + 0.1 Wykorzystanie wysokiej lag

Powiązane problemy