Почему веб-сайт в моем CefSharp не был предварительно загружен, несмотря на его инициализацию в конструкторе основного UI Frame? - PullRequest
0 голосов
/ 13 февраля 2019

Вот мой код.

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 голосов
/ 13 февраля 2019

Здесь есть аналогичное обсуждение на github: Зависит от CefWebBrowser

URL не загружается, потому что вы добавляете ChromiumWebBrowser на скрытую панель, а браузер никогда не создается на скрытойпанель (из-за того факта, что 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();
    }
}
...