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

时间:2019-02-13 14:22:47

标签: c# user-interface cefsharp

这是我的代码。

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 Browser
{

    public ChromiumWebBrowser chromeBrowser;
    public Browser()
    {

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

    }
}

1 个答案:

答案 0 :(得分:1)

在github上也有类似的讨论:CefWebBrowser display dependent

由于未在隐藏面板上添加ChromiumWebBrowser,并且未在隐藏面板上创建浏览器,因此未加载URL(由于Winforms以不同的方式创建控件)。另一方面,Load方法将等待直到创建浏览器。但是有一种特殊的.CreateControl方法可以用作解决方法。

考虑到github上的讨论,您应该将chromeBrowser.CreateControl();添加到Browser构造函数中,因此Browser类应如下所示:

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();
    }
}