FBrowserCEF3Lib浏览器开发技术交流网址

 找回密码
 立即注册
查看: 929|回复: 2

FBrowserCEF3Lib开发手册之正确的关闭姿势和原理解析

[复制链接]

签到天数: 467 天

[LV.9]以坛为家II

79

主题

416

回帖

79万

积分

管理员

皇冠皇冠皇冠皇冠太阳太阳

积分
798316

优秀会员永久VIP会员活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老荣耀会员精华大师大富翁

发表于 2025-11-11 11:52:20 | 显示全部楼层 |阅读模式
文档教程
教程类型: 通用教程
备注说明: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
      怎么样正确的关闭程序,我相信大部分人应该遇到过,关闭的时候卡顿甚至崩溃,而大部分通用的做法就是直接强制关闭程序,其实这样并不是可取的,直接强制关闭,浏览器内部可能还有收尾的事没干完,你就直接关闭了,可能就会出现缓存异常、设置无法保存等情况,甚至是崩溃;

一、首先我们要先说说“FBrowser_关闭”这个功能
  • 该功能采用的异步的模式执行关闭操作,而为什么采用这种方式,请继续看下面;


  • 在cef中对应的关闭功能是“CefShutdown”,而经过无数的测试,从1.0到现在的5.0这个关闭命令,其实和窗口的关闭事件消息是有冲突的,至于为什么冲突我这边不多说了,敢兴趣的可以自己去下载官方CEF去测试,而就因为会冲突,如果你在窗口即将销毁事件里面直接调用“CefShutdown”功能,就有可能会阻塞这个事件,导致一直关闭不了甚至崩溃,所以这里就必须采用异步,来避免阻塞;所以在我封装的“FBrowser_关闭”功能里面并不是直接执行的“CefShutdown”,而是通过了线程和UI线程做了异步跳转执行,就避免了这个问题;


  • 很多人编程习惯不好,创建了无数个浏览器,啪一下直接关闭程序,完全不给浏览器时间,浏览器数据能不能保存成功与否先不说,崩溃了又嗷嗷叫,也不知道先将创建的浏览关闭后在调用程序的执行关闭,所以为了满足这些特殊的人群,我又在“FBrowser_关闭”里面加了循环关闭所有已经打开浏览器的功能当然也还是异步


  • 其实FBrowser_关闭”还有我框架内部写的内置线程,全局变量等数据的释放;



  • 但是,有了上面几点,难道就能很优雅的关闭了?其实也不然,我不知道细心的小朋友有没有发现,易和火山创建的销毁事件,只要是最后一个窗口,外部也没有处理代码的话,这个事件执行完就会立马结束程序,所以按我们之前的做法直接就在这个程序里面调用异步执行的“FBrowser_关闭”他有没有关闭执行完,你怎么知道?你根本就不知道,因为这完全已经不是你的可控范围了,所以在5.0版本中我又加入了“执行关闭完毕”事件(火山和C#都在初始化事件中),而这个事件是框架内部所有释放动作执行完后才会调用以便告诉你我已经执行完了,你可以干掉自己了


所以知道了上面的关闭原理,那我们应该怎么优雅的关闭我们的程序了?请往下继续看

二、关闭流程(以易语言为例)
第一步:在你的主窗口中也就是你的最后一个窗口“可否被关闭”事件中执行框架关闭并阻止当前窗口关闭,如下图
image.png
ps:
1.其实这里你也可以自己做个关闭按钮,而不用窗口自带得关闭按钮,其实这样做的目的(阻止他关闭)就是为了避免窗口关闭和框架的关闭两者事件消息的冲突和程序关闭了但框架内部还未释放完;
2.这里的“FBrowser_关闭”也可以在设置参数,执行完毕后直接关闭整个程序


第二步:在“执行关闭完毕”事件中,再去处理里程序内部的关闭流程,你可以在这里释放非框架内部的你自己创建的东西或直接关闭整个程序,也可直接修改“是否结束程序”参数让框架来关闭你的程序,如下图
image.png
ps:
1.这里框架已经释放完了,千万不要再去操作浏览器相关的东西;
2.这里采用的是单独的线程,如果要执行你的UI相关,最好投递到UI线程(这里是你控件的UI不是浏览器的UI)处理,易一般利用窗口的标签投递,火山可以用自带的投递到主线程处理;
3.事件中是否结束程序这个参数只适用了5.0最新版,请注意!

三、结语

你如果看懂了上面的原理和用意,其实可以自己举一反三,关闭其实也并非非要在窗口事件中处理,至于还能在哪,那就自己感悟吧!



评分

参与人数 1金钱 +20 贡献 +20 收起 理由
mosheng + 20 + 20 很给力!

查看全部评分

签到天数: 265 天

[LV.8]以坛为家I

1

主题

275

回帖

6172

积分

赞助会员

皇冠皇冠太阳太阳月亮月亮

积分
6172

永久VIP会员

发表于 2025-11-12 08:12:30 | 显示全部楼层
很给力!很给力!很给力!很给力!很给力!

签到天数: 695 天

[LV.9]以坛为家II

294

主题

606

回帖

1万

积分

超级版主

皇冠皇冠皇冠太阳

积分
17933

活跃会员热心会员永久VIP会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2025-11-11 14:39:58 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们 在线手册 视频教程 赞助支持 CEF官网 易语言官网 火山开发官网
拒绝任何人以任何形式在本网站发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表本网站立场!

网址帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!

Archiver| 手机版| 小黑屋| 联系QQ:283987887 劰载中...

Powered by Discuz! X5.0 GMT+8, 2026-9-17 06:28 , Processed in 0.045031 second(s), 19 queries , Redis On.

 川公网安备51090302000262 蜀ICP备2023034329号
快速回复 返回顶部 返回列表