运行 geckowebbrowser 的多实例在 1 种形式的多实例上
run multiinstance of geckowebbrowser on multiinstances of 1 form
我想 运行 1 个表单的多个实例,我在上面有一个动态 GeckoWebBrowser 和一些自动化任务,但每次我创建一个新的表单实例时,其他 GeckoWebBrowser 变得不活动,只有最新创建的GeckoWebBrowser 工作
求助!
Dim f As New Form2
f = New Form2
f.Show()
我在 Form2 上的代码
Imports Gecko
Public Class Form3
Friend WithEvents w As New GeckoWebBrowser
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
w = New GeckoWebBrowser
Dim n As Integer = 100
For i = 0 To n
w.Navigate("http://google.com")
'do some stuff here
Next
End Sub
End Class
我得到了与您相同的行为。我找到了解决办法。您可能需要根据需要对其进行调整。我不知道为什么会这样,但它与应用程序消息泵有关。无论如何,这就是我如何让它工作的。
创建 Form1
,只需一个按钮即可启动 Form2
个实例。
代码:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim f As New Form2
f.Show()
End Sub
End Class
使用 Gecko WebBrowser 创建 Form2
,以及一个将在 WebBrowser 中启动导航的按钮。
代码:
Imports System.Threading
Public Class Form2
Private _stack As New Stack(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For i = 0 To 100
_stack.Push("http://google.com")
_stack.Push("https://www.wikipedia.org/")
Next
GeckoWebBrowser1.Navigate(_stack.Pop())
End Sub
Private Sub GeckoWebBrowser1_DocumentCompleted(sender As Object, e As Gecko.Events.GeckoDocumentCompletedEventArgs) Handles GeckoWebBrowser1.DocumentCompleted
Thread.Sleep(500)
GeckoWebBrowser1.Navigate(_stack.Pop())
End Sub
End Class
通过单击 Form1
上的 New Form
按钮打开 Form2
的多个实例。单击 Form2
上的 Start
按钮。这将填充要导航到的 url 堆栈,并导航到堆栈中的第一个 url。完成对每个 link 的导航后,DocumentCompleted
事件处理程序将触发对下一个 link.
的导航
如我所说,您必须根据您的需要调整此解决方案。
我想 运行 1 个表单的多个实例,我在上面有一个动态 GeckoWebBrowser 和一些自动化任务,但每次我创建一个新的表单实例时,其他 GeckoWebBrowser 变得不活动,只有最新创建的GeckoWebBrowser 工作 求助!
Dim f As New Form2
f = New Form2
f.Show()
我在 Form2 上的代码
Imports Gecko
Public Class Form3
Friend WithEvents w As New GeckoWebBrowser
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
w = New GeckoWebBrowser
Dim n As Integer = 100
For i = 0 To n
w.Navigate("http://google.com")
'do some stuff here
Next
End Sub
End Class
我得到了与您相同的行为。我找到了解决办法。您可能需要根据需要对其进行调整。我不知道为什么会这样,但它与应用程序消息泵有关。无论如何,这就是我如何让它工作的。
创建 Form1
,只需一个按钮即可启动 Form2
个实例。
代码:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim f As New Form2
f.Show()
End Sub
End Class
使用 Gecko WebBrowser 创建 Form2
,以及一个将在 WebBrowser 中启动导航的按钮。
代码:
Imports System.Threading
Public Class Form2
Private _stack As New Stack(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For i = 0 To 100
_stack.Push("http://google.com")
_stack.Push("https://www.wikipedia.org/")
Next
GeckoWebBrowser1.Navigate(_stack.Pop())
End Sub
Private Sub GeckoWebBrowser1_DocumentCompleted(sender As Object, e As Gecko.Events.GeckoDocumentCompletedEventArgs) Handles GeckoWebBrowser1.DocumentCompleted
Thread.Sleep(500)
GeckoWebBrowser1.Navigate(_stack.Pop())
End Sub
End Class
通过单击 Form1
上的 New Form
按钮打开 Form2
的多个实例。单击 Form2
上的 Start
按钮。这将填充要导航到的 url 堆栈,并导航到堆栈中的第一个 url。完成对每个 link 的导航后,DocumentCompleted
事件处理程序将触发对下一个 link.
如我所说,您必须根据您的需要调整此解决方案。