运行 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.

的导航

如我所说,您必须根据您的需要调整此解决方案。