Я пытаюсь оценить, будет ли CefSharp работать для нас в приложении XAML/WPF.Необработанное исключение при выходе
В настоящее время мы работаем с веб-браузером MS, который имеет серьезные ограничения.
В нашем приложении есть окно, в котором отображается один из нескольких пользовательских элементов управления, один из которых содержит элемент управления браузера, который загружает веб-страницу, содержащую карту.
Для тестирования я создал настраиваемый элемент управления, который содержит WebBrowser с жестким кодом http://www.google.com.
Затем я создал второй настраиваемый элемент управления, который содержит ChromiumWebBrowser, жестко закодированный до http://www.google.com.
Я ничего не делаю с управлением браузером в коде, я просто делаю пользовательские элементы управления, которые обертывают их видимыми или свернутыми.
Но если у меня есть ChromiumWebBrowser включены в XAML, сделать ли я его видимым или нет, на выходе я получаю исключение:
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.
Просто, чтобы было ясно, если мой пользовательский элемент управления содержит это, Я не получаю исключение:
<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>
Если он содержит это, я:
<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>
Какие идеи?
Я использую версию CefSharp.Wfp 49.0.0, начиная с NuGet. (И CefSharp.Common и cef.redist.x64, хотя я получаю то же самое, здание для x86.)
=== Добавление CallStack ===
> 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
У вас есть полный трассировки стека? – stuartd
Есть ли причина, по которой вы спросили об этом здесь? – amaitland
Я изначально разместил этот вопрос в группе Google CEFSharp и не получил ответа. Прочитав другие вопросы, меня направили в толк, и повторили его там. Я не мог понять, что невозможно. Учитывая, что это формат чата, я даже не мог сказать, ответил ли мне кто-нибудь. Поэтому я перепробовал вопрос здесь, где любые предоставленные ответы не будут потеряны для потомков. –