【发布时间】:2020-07-30 16:53:42
【问题描述】:
我在我的项目中使用 CefSharp 网络浏览器。但是当我在两个 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');");
}
}
这就是我在表单之间切换的方式。
LoginToSettings Login = new LoginToSettings();
Login.Show();
this.Hide();
我的问题是如何初始化它,这样我就不会偶然发现这个异常? 我还尝试了“表单最小化”选项而不是“表单隐藏” 但还是同样的问题。
我已使用此链接来使用 CefSharp 浏览器。 Code Source for CefSharp
【问题讨论】:
-
请不要有代码图片,见idownvotedbecau.se/imageofcode
-
只能调用一次Cef.Initialize,可以查看Cef.IsInitialized是否已经被调用。在我看来,在你的 program.cs 文件中调用它是最简单的地方github.com/cefsharp/CefSharp.MinimalExample/blob/master/… 异常有什么不清楚的地方?这是一个真正的问题,因此如果需要,我可以改进错误消息。在您的情况下,由于您没有在 CefSettings 上设置任何值,因此您根本不需要调用 Cef.Initialize。
-
@amaitland 我正在尝试通过初始化来显示谷歌网页。不是“设定价值”吗?
-
您可以安全地删除 Cef.Initialize(new CefSettings());在您的实例中,因为这是默认设置。您尚未设置任何自定义设置。如果您打算在 CefSettings 上设置一些值,那么只需添加一个 if not Cef.IsInitialized 检查。您只能调用 Cef.Initialize 一次。
标签: c# winforms google-chrome browser cefsharp