C# 加载2个URL';s在不同的情况下同时发生
因此,我想做的是能够加载2个URL的,在同一时间在同一形式与2个浏览器窗口 此示例图像将有助于更好地解释 我似乎不知道该怎么做。目前我似乎只能得到一个例子。如果尝试运行2,则会出现以下错误:C# 加载2个URL';s在不同的情况下同时发生,c#,cefsharp,C#,Cefsharp,因此,我想做的是能够加载2个URL的,在同一时间在同一形式与2个浏览器窗口 此示例图像将有助于更好地解释 我似乎不知道该怎么做。目前我似乎只能得到一个例子。如果尝试运行2,则会出现以下错误: An unhandled exception of type 'System.Exception' occurred in CefSharp.Core.dll Additional information: Cef can only be initialized once. Use Cef.IsInit
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#浏览器吗
每个应用程序只能初始化CEF一次 书中甚至有一个主题 每个应用程序只能初始化CEF一次。一切都没有改变 对此,。这就是CEF的功能 虽然CEF和CefSharp的体系结构(仅仅是一个.NET 顶部的绑定)是不同的: . 有一个通用的浏览器进程,然后生成一个渲染器 处理每个“窗口”或“选项卡”。(您可以在窗口中看到它们 任务管理器) 基本上这是不可能的,即使是以不同的形式。 您可以使用以下代码段检查是否已经有任何实例在运行(也许您可以先停止一个实例,然后再启动另一个实例,尽管在您的情况下这似乎是无用的):
您可以在表单中添加多个groupBox,并将“ChromiumWebBrowser”添加到groupBox。 例如:
简单的选择是在
Program.cs
中初始化。这个问题措词不当,因此答案只是胡乱猜测@jLynx,请说明是否需要会话隔离。也就是说,两个浏览器控件是否需要有单独的会话(就像两个不同的用户登录到同一个应用程序一样),或者它们是否可以共享会话和状态?理想情况下是的,但这与我4年前想要的并不重要
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;
}
if (Cef.IsInitialized)
{
Console.WriteLine("Sorry, cannot start other instance because there's already an open browser");
}
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;