在 VB.NET 中的 WebBrowser 控件中连续打开多个 URL

Open multiple URLs successively in WebBrowser control in VB.NET

我正在尝试在一个循环显示一系列 url 并在 WebBrowser 控件中显示 url 的表单上创建一个 "rotator"。下面的代码显示了我的表单,但是表单仍然是 white/blank,然后数组中的最后一个 url 过一会儿出现了。当我在每个 url 之间放置一个 MessageBox 以创建止损时,它起作用并且每个 url 出现。我试过用 Sleep 代替 MessageBox,但这没有用。我也试过增加 Sleep 时间,但这也没有用。我怎样才能让它正常工作?

Sub Rotate()

    Dim Urls() As String = {"www.whosebug.com", "www.google.com", "www.yahoo.com"}
    Dim counter As Integer = 0

    Form3.Show()

    Do Until counter = 3

        Form3.WebBrowser1.ScriptErrorsSuppressed = True
        Form3.WebBrowser1.Navigate(Urls(counter))           
        'MessageBox.Show("Next")
        counter = counter + 1
        System.Threading.Thread.Sleep(2000)

    Loop

End Sub

您可以在更改 URL 后调用 Application.DoEvents,以便控件有机会重绘自身。
但是,更好的方法是使用每 2 秒触发一次的 timer,然后更改事件处理程序中的 URL,以便您的 UI 保持响应。
例如,在您的表单中设置一个新字段 myTimer,在表单的加载事件中初始化它,并在 Tick 事件中调用您的 Rotate 方法。由于 Rotate 现在被多次调用,我们必须将 counter 变量移出方法并使其成为一个字段,以便我们在调用之间保留它的值。我通常写 C# 所以希望我没有在下面打错字 :)

Private WithEvents myTimer As System.Windows.Forms.Timer
Private counter As Integer

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    ' ... your existing code ...
    counter = 0
    myTimer = New System.Windows.Forms.Timer
    myTimer.Interval = 2000
    myTimer.Enabled = True
    myTimer.Start()
End Sub

Private Sub myTimerTick() Handles myTimer.Tick
    Rotate()
End Sub

Sub Rotate()
    Dim Urls() As String = {"www.whosebug.com", "www.google.com", "www.yahoo.com"}
    WebBrowser1.ScriptErrorsSuppressed = True
    WebBrowser1.Navigate(Urls(counter))           
    counter = counter + 1
    If counter > 3 Then myTimer.Stop()
End Sub