winforms 如何正确初始化CefSharp Web浏览器

nszi6y05  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(445)

我在项目中使用CefSharp Web浏览器。但是当我在两个WinForms之间切换时,我得到了这个异常。
System.Exception:'每个进程只能初始化一次CEF。这是基础CEF/Chromium框架的限制。您可以通过RequestContext. SetPreference在运行时更改许多(不是全部)设置。请参阅https://github.com/cefsharp/CefSharp/wiki/General-Usage#request-context-browser-isolation使用Cef.IsInitialized来防止此异常。如果您意外地看到这一点,那么您可能正在调用Cef。在创建ChromiumWebBrowser示例之后初始化,它必须在创建第一个示例之前。
这里是代码。

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

k4emjkb1

k4emjkb11#

如果您确实想调用Cef.Initialize(....);(当然是使用一些参数,如CefSettings obj等)
您必须在之前调用它,因为创建浏览器时会使用默认设置初始化 * Cef。
正如您可能猜到的,一旦您再次尝试调用Initialize,它将出现错误,因为它只能初始化一次。

cu6pst1q

cu6pst1q2#

您需要添加以下行:

Cef.Initialize();

相关问题