尽管在主 UI 框架的构造函数中对其进行了初始化,但为什么我的 CefSharp 中的网站没有预加载?

Why the website in my CefSharp not pre-loaded despite of initializing it in the constructor of the main UI Frame?

这是我的代码。

public partial class MainScreen : Form
{
    public MainScreen()
    {

        InitializeComponent();
        //Initializing the browser in class Browser
        Browser brow = new Browser();
        //Hiding the user control that contains the browser UI
         this.browserPanel1.Visible = false;
        //Adding the browser to my main form's user control
        this.browserPanel1.Controls.Add(brow.chromeBrowser);


    }

我有一个按钮,它具有显示最初隐藏的用户控件的功能。

private void button1_Click(object sender, EventArgs e)
    {
     this.browserPanel1.Visible = true;
    }

我在一分钟后单击此按钮。 通常,在我通过单击按钮使用户控件再次可见之前,网站应该已完全加载。但是当我点击按钮时,浏览器花费的时间与此时创建它的时间相同。为什么网站没有预加载到浏览器中?

//浏览器class

class Browser
{

    public ChromiumWebBrowser chromeBrowser;
    public Browser()
    {

        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        chromeBrowser = new ChromiumWebBrowser("https://google.com");
        chromeBrowser.Dock = DockStyle.Fill;

    }
}

这里有关于 github 的类似讨论:CefWebBrowser display dependent

URL 未加载,因为您在隐藏面板上添加了 ChromiumWebBrowser,并且浏览器永远不会在隐藏面板上创建(这也是因为 winforms 以延迟方式创建控件)。另一方面,Load 方法等待浏览器创建。但是有一种特殊的 .CreateControl 方法可以用作解决方法。

考虑到关于 github 的讨论,您应该将 chromeBrowser.CreateControl(); 添加到您的浏览器构造函数中,因此浏览器 class 应该如下所示:

class Browser
{

    public ChromiumWebBrowser chromeBrowser;
    public Browser()
    {

        CefSettings settings = new CefSettings();
        Cef.Initialize(settings);
        chromeBrowser = new ChromiumWebBrowser("https://google.com");
        chromeBrowser.Dock = DockStyle.Fill;
        chromeBrowser.CreateControl();
    }
}