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

Load 2 URL's at the same time in different instances CefSharp

所以我想做的是能够使用 2 个 cefsharp 浏览器以相同的形式同时加载 2 个 URL windows 这个示例图像将有助于更好地解释

我似乎不知道该怎么做。目前我似乎只能得到一个实例。如果我尝试 运行 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;
        }

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

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)

基本上是不可能的,各种形式也不行

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

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

可以在Form中添加多个groupBox,在groupBox中添加"ChromiumWebBrowser"。 示例:

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;