1. 注意不要反复初始化
在初始化的时候,比如:
//初始化一个browser
public ChromiumWebBrowser browser;
//初始化参数设定
public void InitBrowser()
{
//注意,这里多写了一个判定,如果不写这个,你一定会报错,至于为什么,你自己想
if (Cef.IsInitialized == false)
{
Cef.Initialize(new CefSettings());
}
browser = new ChromiumWebBrowser("https://www.google.com");
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
browser.LoadingStateChanged += Browser_LoadingStateChanged;
}
2. 关于判断网页是否加载完成
一般建议是用这个来判定:
bool checkBrowser = browser.GetBrowser().IsLoading;
3. 关于判断网页是否加载完成,你发现执行判断多次,特别是有一种情况是页面是加载完了,但页面里面的元素实际上是还未显示出来的情况,
那建议看这篇博文:https://www.cnblogs.com/Huzi-note/p/CefSharp_AwaitPageLoaded.html
代码:
public static async Task<bool> IsLoading(this ChromiumWebBrowser browser)
{
while (browser.GetBrowser().IsLoading)
{
await Task.Delay(500);
}
return true;
}
4. 建议在Form_closing的时候,删除掉这个:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//为什么要删除,是因为关闭CefSharp也算一次触发,而FormClosing的优先级是大于CefSharp,所以我先把这个拿减掉
browser.LoadingStateChanged -= Browser_LoadingStateChanged;
}
5. 建议在Form_Closed的时候,释放掉这个browser:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
browser.Dispose();
}
你不释放掉那你就等着你的风扇狂转吧。
查了一下,GC好像并不会主动释放CefSharp生成的Sub进程,如果你多次调试项目,你马上就会发现你CPU爆满。
推荐阅读: