2013-04-07 7 views
17

У меня есть код, и я хочу, чтобы он где-то посередине, прежде чем идти вперед. После WebBrowser1.Document.Window.DomWindow.execscript ("checkPasswordConfirm();", "JavaScript") Я хочу, чтобы он подождал 0,5 секунды, а затем выполнил остальную часть кода.Подождите .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

Как вы знаете, что будет достаточно долго? –

+0

Потому что я его протестировал. И это кажется достаточно, но когда функция java-скрипта завершится, будет лучше. – koolboy5783

+3

Что делать, если мое подключение к Интернету происходит медленнее? Или интерпретатор JavaScript моего компьютера? Я хочу сказать, что конкретное значение времени редко является хорошим решением. Разумеется, не очень надежный. –

ответ

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

+0

Я знаю. У вас есть два варианта: либо заморозить поток, либо использовать таймер (предложение chipperyman573) ... – Sam

+0

Я использую приложение winform VB.NET, и это не приводит к сбою моей программы.Я ожидаю завершения SQL-обновления, но, как упоминает @Neolisk, обработка событий, вероятно, является лучшим способом для этого. Подумайте, мне может потребоваться создать вопрос для решения этой проблемы, так как я не вижу, чтобы какие-либо сообщения размещались в StackOverflow на данный момент. – eniacAvenger

-3

VB.net 4,0 рамки Код:

Threading.Thread.Sleep(5000)

Целое число в миллисекундах (1 сек = 1000 миллисекунд)

я проверить его, и он работает

+1

еще один ответ уже говорит об этом, и ОП говорит, что это ему не помогает ... –

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 

эта функция ждать определенного времени без замораживания программного обеспечения , однако увеличивает загрузку процессора, но ниже функции не только не замерзает программное обеспечение, но и не увеличивает нагрузку на процессор:

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 + высокая загрузка процессора + без задержек

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 + высокая инерционность

Смежные вопросы