在1种形式的多实例上运行geckowebbrowser的多实例

时间:2019-07-19 13:48:40

标签: vb.net geckofx

我想运行多个具有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

1 个答案:

答案 0 :(得分:0)

我能够得到与您相同的行为。我找到了解决方案。您可能需要根据需要进行调整。我不知道为什么会这样,但是它与应用程序消息泵有关。无论如何,这就是我的工作方式。

使用一个按钮创建Form1,以启动Form2实例。

enter image description here

和代码:

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和一个将在WebBrowser中启动导航的按钮创建Form2

enter image description here

和代码:

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

通过单击Form2上的New Form按钮来打开Form1的多个实例。单击Start上的Form2按钮。这将填充要导航到的URL堆栈,并导航到该堆栈上的第一个URL。导航到每个链接后,DocumentCompleted事件处理程序将触发导航到下一个链接。

正如我所说,您将不得不根据需要调整此解决方案。