2016-08-19 8 views
0

So was ich möchte in der Lage sein, 2 URLs gleichzeitig in das gleiche Formular mit 2 cefsharp Browser-Fenstern laden Dieses Beispielbild wird helfen, ein wenig zu erklären besser enter image description hereLoad 2 URLs gleichzeitig in verschiedenen Instanzen CefSharp

Ich kann nicht scheinen, wie man das macht. Im Moment kann ich nur eine Instanz finden. Wenn ich 2 laufen versuchen, bekomme ich diesen Fehler:

An unhandled exception of type 'System.Exception' occurred in CefSharp.Core.dll 

Additional information: Cef can only be initialized once. Use Cef.IsInitialized to guard against this exception. 

Wenn dies nicht somone getan werden kann, eine andere HTML5-Browser unterstützt für C# empfehlen?

public ChromiumWebBrowser Browser; 
CefSettings settings = new CefSettings(); 
    void InitBrowser() 
     { 
      settings.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2764.0 Safari/537.36"; 
      Cef.Initialize(settings); 
      Browser = new ChromiumWebBrowser("about:blank"); 
      Browser.FrameLoadEnd += OnFrameLoadEnd; 
      Browser.LoadingStateChanged += OnLoadingStateChanged; 
      Browser.FrameLoadStart += OnFrameLoadStart; 
      Browser.LoadError += OnLoadError; 
      Controls.Add(Browser); 
      Browser.Dock = DockStyle.Fill; 
     } 
+0

https://github.com/cefsharp/CefSharp.MinimalExample/blob/master/CefSharp.MinimalExample.WinForms/Program.cs#L16 Einfache Option ist die Initialisierung in 'Program.cs'. – amaitland

Antwort

0

können Sie nur CEF initialisieren einmal, pro Anwendung.

Es gibt sogar ein Thema in der github CefSharp repository here.

You can only initialize CEF once, per application. Nothing has changed in regards to this. It's just how CEF functions.

Although the architecture of CEF and CefSharp (which is merely a .NET binding on top of it) is different: https://bitbucket.org/chromiumembedded/cef/wiki/Architecture#markdown-header-process-considerations . There is a one common Browser process which then spawn a Renderer process for each "window" or "tab". (You can see them in your Windows Task Manager)

Im Grunde ist es nicht möglich, auch nicht in verschiedenen Formen.

Sie können prüfen, ob bereits jede Instanz läuft den folgenden Schnipsel mit (vielleicht können Sie die erste Station, und dann noch starten, obwohl in Ihrem Fall scheint nutzlos zu sein):

if (Cef.IsInitialized) 
{ 
    Console.WriteLine("Sorry, cannot start other instance because there's already an open browser"); 
} 
-1

können Sie Führen Sie das mit System.Threading

"Sie können CEF nur einmal pro Anwendung initialisieren" von diesem verstehe ich;

Sie können Run.Application(new Form()) mehrmals mit System.Threading verwenden.

Verwandte Themen