2016-05-27 7 views
0

CefSharpがXAML/WPFアプリケーションで動作するかどうかを評価しようとしています。終了時の処理されない例外

現在のところ、私たちはMSのWebブラウザを使っていますが、これには厳しい制限があります。

私たちが持っているものは、いくつかのカスタムコントロールの1つを表示するウィンドウです。その1つにはマップを含むWebページを読み込むブラウザコントロールが含まれています。

テスト用に、http://www.google.comにハードコードされたWebブラウザーを含むカスタムコントロールを作成しました。

次に、http://www.google.comにハードコードされたChromiumWebBrowserを含む2番目のカスタムコントロールを作成しました。

コード内のいずれのブラウザコントロールでも何もしません。ユーザーコントロールを表示または折りたたんで単純に変更しています。

しかし、私は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> 

Aいいえ、アイデア?

NuGetのCefSharp.Wfpバージョン49.0.0を使用しています。 (そしてCefSharp.Commonとcef.redist.x64、私はx86用と同じことの建物を取得しますけれども。)コールスタックを追加する

=== ===は私たちが行う必要がある何

> 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 
+0

あなたは完全なスタックトレースを持っていますか? – stuartd

+0

ここにもう一度尋ねた理由はありますか? – amaitland

+1

私はもともとこの質問をCEFSharp Google Groupに掲載しましたが、何の反応もありませんでした。他の質問を読んで、私はガタガタして、繰り返しました。私は読書が不可能であることがわかった。チャット形式だと、誰かが私に答えてくれたかどうかは分からない。そこで私はここで質問を再投稿しました。返答は返されても後世には失われませんでした。 –

答えて

0

を取ることです初期化とシャットダウンの制御。 App.OnStartupで

():App.OnExitで

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 
    Cef.Initialize(); 
    ... 
} 

():

protected override void OnExit(ExitEventArgs e) 
{ 
    Cef.Shutdown(); 
    base.OnExit(e); 
} 
関連する問題