Ich versuche zu bewerten, ob CefSharp für uns in einer XAML/WPF-Anwendung funktionieren würde.Unbehandelte Ausnahme beim Beenden
Derzeit arbeiten wir mit dem WebBrowser von MS, der schwerwiegende Einschränkungen aufweist.
In unserer App befindet sich ein Fenster, in dem eines von mehreren benutzerdefinierten Steuerelementen angezeigt wird, von denen eines ein Browsersteuerelement enthält, mit dem eine Webseite mit einer Karte geladen wird.
Zum Testen habe ich ein benutzerdefiniertes Steuerelement erstellt, das einen WebBrowser enthält, der fest mit http://www.google.com codiert ist.
Ich erstellte dann ein zweites benutzerdefiniertes Steuerelement, das einen fest codierten ChromiumWebBrowser zu http://www.google.com enthält.
Ich mache nichts mit beiden Browser-Steuerelement in Code, ich mache einfach die Benutzersteuerelemente, die sie sichtbar oder ausgeblendet umbrechen.
Aber wenn ich die ChromiumWebBrowser im XAML enthalten, ob ich es sichtbar machen oder nicht, an der Ausfahrt erhalte ich eine Ausnahme:
System.InvalidOperationException was unhandled
Message: An unhandled exception of type 'System.InvalidOperationException' occurred in WindowsBase.dll
Additional information: The calling thread cannot access this object because a different thread owns it.
Nur um klarzustellen, wenn meine benutzerdefinierte Steuerung dieses enthält, ich habe nicht eine Ausnahme erhalten:
<KtWpf:KorUserControl
x:Class="KtWpf.CEFSharpUtilityMap"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:KtWpf="clr-namespace:KtWpf" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
>
<DockPanel>
<TextBox DockPanel.Dock="Top">CEFSharp</TextBox>
<WebBrowser
x:Name="mapBrowser"
Source="http://www.google.com"
/>
</DockPanel>
</KtWpf:KorUserControl>
Wenn es diese enthält, das tue ich:
<KtWpf:KorUserControl
x:Class="KtWpf.CEFSharpUtilityMap"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
xmlns:KtWpf="clr-namespace:KtWpf" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
>
<DockPanel>
<TextBox DockPanel.Dock="Top">CEFSharp</TextBox>
<cefSharp:ChromiumWebBrowser
x:Name="mapBrowser"
Address="http://www.google.com"
/>
</DockPanel>
</KtWpf:KorUserControl>
A ny Ideen?
Ich benutze CefSharp.Wfp Version 49.0.0, von NuGet. (Und CefSharp.Common und cef.redist.x64, obwohl ich das gleiche Gebäude für x86 erhalten.)
=== Hinzufügen Aufrufliste ===
> WindowsBase.dll!System.Windows.Threading.Dispatcher.VerifyAccess() Unknown
PresentationCore.dll!MS.Internal.Media.VisualTreeUtils.AsVisual(System.Windows.DependencyObject element, out System.Windows.Media.Visual visual, out System.Windows.Media.Media3D.Visual3D visual3D) Unknown
PresentationCore.dll!MS.Internal.Media.VisualTreeUtils.AsNonNullVisual(System.Windows.DependencyObject element, out System.Windows.Media.Visual visual, out System.Windows.Media.Media3D.Visual3D visual3D) Unknown
PresentationCore.dll!System.Windows.Media.VisualTreeHelper.GetParent(System.Windows.DependencyObject reference) Unknown
PresentationCore.dll!System.Windows.Media.Visual.ClearTreeBits(System.Windows.DependencyObject e, System.Windows.Media.VisualFlags treeFlag, System.Windows.Media.VisualFlags nodeFlag) Unknown
PresentationCore.dll!System.Windows.Media.Visual.VisualAncestorChanged.remove(System.Windows.Media.Visual.AncestorChangedEventHandler value) Unknown
PresentationCore.dll!System.Windows.PresentationSource.RemoveSourceChangedHandler(System.Windows.IInputElement e, System.Windows.SourceChangedEventHandler handler) Unknown
CefSharp.Wpf.dll!CefSharp.Wpf.ChromiumWebBrowser.Dispose(bool isdisposing) Unknown
CefSharp.Wpf.dll!CefSharp.Wpf.ChromiumWebBrowser.Dispose() Unknown
CefSharp.Core.dll!CefSharp.Cef.Shutdown() Unknown
CefSharp.Core.dll!CefSharp.Cef.ParentProcessExitHandler(object sender, System.EventArgs e) Unknown
Haben Sie einen vollständigen Stack-Trace haben? – stuartd
Gibt es einen Grund, warum du das hier nochmal gefragt hast? – amaitland
Ich habe diese Frage ursprünglich in der CEFSharp Google-Gruppe gepostet und keine Antwort erhalten. Während ich die anderen Fragen durchging, wurde ich an Gitter verwiesen und wiederholte es dort. Ich fand gitter unmöglich zu lesen. Angesichts seines Chat-Formats konnte ich nicht einmal sagen, ob jemand auf mich geantwortet hatte. Deshalb habe ich die Frage hier noch einmal gestellt, wo alle Antworten nicht der Nachwelt verloren gehen. –