Вызов сабвуфера в другом классе не работает правильно

Я создаю браузер в VB.Net, используя Cefsharp. Я создал пользовательский LifeSpanHandler для обработки всплывающих окон, но когда я пытаюсь вызвать Public Sub в другом классе, он не дает ожидаемого результата. Я создал свой LifeSpanHandler, используя следующий код:

Public Class LifeSpanHandler
Implements ILifeSpanHandler
Public Event PopupRequest As Action(Of String)
Public Function OnBeforePopup(browser As IWebBrowser, sourceUrl As String, targetUrl As String, ByRef x As Integer, ByRef y As Integer, ByRef width As Integer, ByRef height As Integer) As Boolean Implements ILifeSpanHandler.OnBeforePopup
    RaiseEvent PopupRequest(targetUrl)
    My.Settings.newpage = targetUrl
    Call Form1.IntNewTab()
    Return True
End Function
Public Sub OnBeforeClose(browser As IWebBrowser) Implements ILifeSpanHandler.OnBeforeClose

End Sub
End Class

И затем у меня есть browser.LifeSpanHandler = New LifeSpanHandler, где он инициализирован. (С browser вместо CefSharp.WinForms.ChromiumWebBrowser)

Я сохраняю targetURL в My.Settings.newpage, затем, когда браузер инициализируется, он открывается по этому URL-адресу. В другом классе (и в другой форме) у меня есть этот код:

Public Sub IntNewTab()
    Dim tab As New TabPage
    Dim newtab As New tabs
    newtab.Show()
    newtab.Dock = DockStyle.Fill
    newtab.TopLevel = False
    tab.Controls.Add(newtab)
    Me.CustomTabControl1.TabPages.Add(tab)
    Me.PictureBox1.Location = New System.Drawing.Point(PictureBox1.Location.X + 150, 3)
    My.Settings.newpage = My.Settings.homepage
    Me.CustomTabControl1.SelectedTab = tab
End Sub

Какой код для добавления новой вкладки. Но в моем LifeSpanHandler, когда я Call Form1.IntNewTab(), браузер зависает не в фокусе. Окно затемнено (это означает, что оно не в фокусе), и я не могу перетаскивать его, и оно остается поверх всего остального, и я не могу взаимодействовать ни с одной частью браузера.

Чтобы проверить что-то еще, я добавил кнопку в Form1 с точным кодом из IntNewTab, и когда я нажимаю на нее, открывается новая вкладка на указанной странице, как обычно. Я также пытался оставить кнопку видимой и OnBeforePopup добавить Form1.Button1.PerformClick, но это тоже не сработало. У кого-нибудь еще есть опыт в этом, или есть какие-либо предложения?

Редактировать:

Я добавил в свой браузер следующие коды, чтобы попытаться избавиться от экземпляра по умолчанию (насколько я понял):

To Form1:

Module Program
Friend frmMain As Form1
End Module

In Form1_Load:

`frmMain = Me`

Затем я добавил этот код в LifeSpanHandler, чтобы отразить изменения:

Dim mainFrm = New Form1()
    mainFrm.IntNewTab()

И это не сработало. Он просто продолжал зависать не в фокусе, как и раньше. Я также пытался добавить frmMain.IntNewTab() (код, который находится в Form1_Load), и это все равно не сработало.


person AJDev    schedule 18.06.2015    source источник
comment
Использование экземпляра формы по умолчанию может быть проблемой. Вроде не должно быть, а может...   -  person Ňɏssa Pøngjǣrdenlarp    schedule 19.06.2015
comment
@Plutonix, что ты имеешь в виду? Вы говорите об изменении Form1 на что-то другое?   -  person AJDev    schedule 19.06.2015
comment
stackoverflow.com/a/28290434/1070452   -  person Ňɏssa Pøngjǣrdenlarp    schedule 19.06.2015
comment
@Plutonix Я понял это как мог и внес изменения в свой первоначальный вопрос.   -  person AJDev    schedule 19.06.2015
comment
Скорее всего, вам придется вернуться к потоку UI. LifeSpanHandler выполняется в одном из CEF потоков.   -  person amaitland    schedule 19.06.2015
comment
@amaitland Извините, но у вас есть пример? Я впервые работаю с несколькими потоками...   -  person AJDev    schedule 19.06.2015
comment
Я не знаю VB.Net, поэтому не могу предоставить вам прямой образец. WinForms пример github.com/cefsharp/CefSharp/ blob/ WPF пример github.com/ cefsharp/CefSharp/blob/   -  person amaitland    schedule 19.06.2015