dotnetbrowser Вызов .NET из JavaScript - ThreadProblem - PullRequest
0 голосов
/ 15 октября 2018

[dotnetbrowser] Вызов .NET из JavaScript - ThreadProblem

я использую vb net, против 2017 и WPF, без mvvm.

Мое главное окно Wpf содержит элемент управления dotnetbrowser-Webbrowser (оценкатолько).Выглядит так:

            <wpf:WPFBrowserView x:Name="WebBrowser1" Background="Transparent"  Panel.ZIndex="1110"  
                                Margin="-5,-5,0,0"   Grid.ColumnSpan="2" 
                        BrowserType="LIGHTWEIGHT"           VerticalAlignment="Top" HorizontalAlignment="Left"
                                 Width="300" Height="300" >
                <wpf:WPFBrowserView.Preferences>
                    <DotNetBrowser:BrowserPreferences TransparentBackground="True"/>
                </wpf:WPFBrowserView.Preferences>
            </wpf:WPFBrowserView>

Я определил событие так:

         AddHandler WebBrowser1.Browser.ScriptContextCreated,
                    Sub(sender As Object, e As ScriptContextEventArgs)
                        Dim value As JSValue = WebBrowser1.Browser.ExecuteJavaScriptAndReturnValue("window")
                        value.AsObject().SetProperty("Account", New Account())
                    End Sub

Учетная запись выглядит следующим образом:

    Public Class Account
        Public Sub Save(firstName As String, lastName As String)
            Try
                MessageBox.Show(firstName & " " & lastName)
                Dim freileg As New winLeg(firstName)
                freileg.Show()

            Catch ex As Exception
                l(ex.ToString())
            End Try
        End class

В окне сообщения правильно отображается имя, фамилия, имя,Но новое WPFWindow (winleg) разбивает ошибку:

Beim aufrufenden Thread muss es sich um einen STA-Thread handeln, da dies 
für viele Komponenten der Benutzeroberfläche erforderlich ist.

(англ: вызывающий поток должен быть STA, так как он необходим для многих компонентов пользовательского интерфейса)

Мне нужны возвращенные данные вмой основной поток wpf-окна.Я не очень привык к Threading (кроме Backgroundworker), поэтому я не в курсе.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 17 октября 2018

Попробуйте вызвать свой код с помощью диспетчера приложений.Вот пример реализации Account:

Public Class Account
    Public Sub Save(firstName As String, lastName As String)
        Application.Current.Dispatcher.BeginInvoke(
                Sub()
                    Try
                        Dim window As New Window()
                        window.Title = firstName & " " & lastName
                        window.Width = 320
                        window.Height = 240
                        window.Show()
                    Catch ex As Exception
                        Debug.WriteLine(ex.ToString())
                    End Try
                End Sub)
    End Sub
End Class
...