在 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
我正在尝试在一个循环显示一系列 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