在不同的实例CefSharp中同时加载2个URL

时间:2016-08-19 06:29:40

标签: c# cefsharp

所以我想要做的是能够以2个cefsharp浏览器窗口以相同的形式同时加载2个URL 此示例图像将有助于更好地解释 enter image description here

我似乎无法弄清楚如何做到这一点。目前我似乎只能得到一个实例。如果我尝试运行2,我会收到此错误:

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.

如果不能这样做,可以推荐另一个支持HTML5的C#浏览器吗?

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;
        }

2 个答案:

答案 0 :(得分:0)

每个应用程序只能初始化CEF

github CefSharp repository here中甚至还有一个话题。

  

每个应用程序只能初始化一次CEF。什么也没有变   就此而言。这就是CEF的运作方式。

     

虽然CEF和CefSharp的架构(它只是一个.NET   绑定在它上面)是不同的:   https://bitbucket.org/chromiumembedded/cef/wiki/Architecture#markdown-header-process-considerations。   有一个常见的浏览器进程,然后生成一个渲染器   每个“窗口”或“标签”的过程。 (您可以在Windows中看到它们   任务经理)

基本上它是不可能的,甚至不是以不同的形式。

您可以使用以下代码检查是否已经有任何实例正在运行(也许您可以停止第一个,然后启动另一个,尽管在您的情况下似乎没用):

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

答案 1 :(得分:0)

您可以在Form中添加几个groupBox并将“ ChromiumWebBrowser”添加到groupBox。 示例:

string url1 = "https://www.url1.com";
string url2 = "https://www.url2.com";
string url3 = "https://www.url3.com";

CefSettings settings = new CefSettings();
// Initialize cef with the provided settings
Cef.Initialize(settings);

        // Create a browser component
        ChromiumWebBrowser chromeBrowser1;
        chromeBrowser1 = new ChromiumWebBrowser(url1);
        // Add it to the form and fill it to the form window.
        groupBox1.Controls.Add(chromeBrowser1);
        chromeBrowser1.Dock = DockStyle.Fill;

        ChromiumWebBrowser chromeBrowser2;
        chromeBrowser2 = new ChromiumWebBrowser(url2);
        groupBox2.Controls.Add(chromeBrowser2);
        chromeBrowser2.Dock = DockStyle.Fill;

        ChromiumWebBrowser chromeBrowser3;
        chromeBrowser3 = new ChromiumWebBrowser(url3);
        groupBox3.Controls.Add(chromeBrowser3);
        chromeBrowser3.Dock = DockStyle.Fill;