记一次开发CefSharp做浏览器时关闭页面上时未释放遇到的小问题
问题:当CefSharp放在List里,然后用了Remove移除,CefSharp是否还存在。
我将Cefsharp做成UserControl控件,然后在Main页面里采用List<UserControl>的方式做一个浏览器的标签页如下图
然后我右击关闭的时候,习惯性的直接Remove掉,而这时问题就出现了。Cef并没有被释放掉,依旧存在于后台。(注:发现这个问题也是挺凑巧的,那时刚好在试验CefSharp播放Mp4,然后我Remove掉页面的时候,之前页面居然还在播放声音,这才引起了我的注意。)
解决办法就是:在关闭的时候调用一下browser.GetBrowser().CloseBrowser(true);。当然这里面还有一个问题,当你开了多个标签的时候你关掉了某一个会突然出现前面的页面好像也一起释放掉了,页面直接空白。
经过排查得知当你选择去让CefSharp不弹出新窗口的是时候会去写ILifeSpanHandler。如果在DoClose这个方法里选择去return false 。那么你就会遇到我上面遇到问题。那么随之而来的又有一个新问题。就是当你选择去return true时。如果你有用上DevTool进行页面调试的话,你会发现当DevTool打开后再点关闭它会关不掉。因此最终可以采用以下写法如图示
解释下,第一步:判断DevTool是否已经打开。如果已经打开并且当前要关闭的页面属于弹窗(因为DevTool属于弹窗)时选择去return false。其他时候关闭页面时就去return true。这样一来就可以解决这些问题。
(可能写的文章对于大佬来说鸡肋,但这却是我开发过程中遇到的点问题。只希望给后来者少走点坑。毕竟这个问题我在百度上没找到解答,所以就写下来。)
文章不易,如有错误,请指出。转载请标明链接