使用cefsharp在winform中嵌套瀏覽器,解決程序閃退問題,你也可以做一個紅芯瀏覽器^v^


使用cefsharp在winform中嵌套瀏覽器

簡單使用cefsharp在winform中嵌套瀏覽器

在上一節,我們學習了如何簡單地在winform中嵌入chromium瀏覽器,我在使用這個開發項目時,需要點擊一個按鈕,彈出嵌入瀏覽器的窗體,出現一個問題,就是第一次點擊按鈕可以正常打開瀏覽器,第二次點擊就會出現卡殼,閃退問題。由於對於chromium這個龐大的程序不太了解,上網搜索相關文章解決了該問題:
就是在嵌入瀏覽器的窗體類中不能用Cef.shutdown();需要在調用的主窗體中才能調用Cef.shutdown();,貼一下代碼吧:

主窗體代碼:點擊按鈕會彈出嵌有瀏覽器的窗體
using CefSharp;
using System;
using System.Windows.Forms;

namespace SecondApp
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FrmSecond frmSecond = new FrmSecond();
            frmSecond.Show();
        }
		//在這最后是否Cef
        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cef.Shutdown();
            Environment.Exit(0);
        }
    }
}

//嵌入瀏覽器的窗體:
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Windows.Forms;

namespace SecondApp
{
    public partial class FrmSecond : Form
    {
        public ChromiumWebBrowser chromeBrowser;
        public FrmSecond()
        {
            InitializeComponent();
        }
        private void FrmSecond_Load(object sender, EventArgs e)
        {
            // 創建瀏覽器控件
            chromeBrowser = new ChromiumWebBrowser("https://blog.csdn.net/xingkongtianyuzhao");
            // 將控件添加到窗體
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
        }
        //初始化瀏覽器並啟動
        public void InitializeChromium()
        {
            try
            {
                CefSettings settings = new CefSettings();
                // 設置是否使用GPU
                settings.CefCommandLineArgs.Add("disable-gpu", "1");
                // 設置是否使用代理服務
                settings.CefCommandLineArgs.Add("no-proxy-server", "1");
                // 設置是否啟動js交互,假如需要原生與js方法互調,則需要設置為true
                CefSharpSettings.LegacyJavascriptBindingEnabled = true;
                // 初始化cef
                Cef.Initialize(settings, true, browserProcessHandler: null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //窗口關閉
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            chromeBrowser.CloseDevTools();//關閉瀏覽器調試工具
            //此方法會同時關閉窗口,我們真只可以直接調用該方法,同時關閉瀏覽器及窗口
            chromeBrowser.GetBrowser().CloseBrowser(true);//關閉瀏覽器
            //釋放瀏覽器對象
            if (chromeBrowser != null && !chromeBrowser.Disposing)
            {
                chromeBrowser.Dispose();
            }
        }
    }
}

具體源碼參考:

https://gitee.com/Alexander360/LearnCefsharp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM