[英]How to properly initialize CefSharp web browser
我在我的项目中使用 CefSharp web 浏览器。 但是当我在两个 WinForms 之间切换时,我得到了这个异常。
System.Exception: 'CEF 每个进程只能初始化一次。 这是底层 CEF/Chromium 框架的限制。 您可以在运行时通过 RequestContext.SetPreference 更改许多(不是全部)设置。 请参阅https://github.com/cefsharp/CefSharp/wiki/General-Usage#request-context-browser-isolation使用 Cef.IsInitialized 来防范此异常。 如果您意外地看到这个,那么您很可能在创建 ChromiumWebBrowser 实例之后调用 Cef.Initialize,它必须在创建第一个实例之前。
这是代码。
public ChromiumWebBrowser browser;
public void InitBrowser()
{
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser(Settings.Default.SetLink);
this.GpBrwsr.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
}
public Form3()
{
InitBrowser();
}
private void browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (e.IsLoading == false)
{
browser.ExecuteScriptAsync("alert('All Resources Have Loaded');");
}
}
这就是我在 forms 之间切换的方式。
LoginToSettings Login = new LoginToSettings();
Login.Show();
this.Hide();
我的问题是如何初始化它,这样我就不会偶然发现这个异常? 我也尝试了“表单最小化”选项而不是“表单隐藏”但仍然是同样的问题。
我已使用此链接来使用 CefSharp 浏览器。 CefSharp 的代码源
对于未来来到这里的人:
如果你确实想调用Cef.Initialize(....);
(当然有一些参数,如 CefSettings obj 等。)
您必须在创建new ChromiumWebBrowser()
之前调用,因为创建浏览器将使用默认设置初始化Cef,并且您可能会猜测,一旦您再次尝试调用 Initialize,它就会出现错误,因为它只能是初始化一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.