我在WPF中使用CefSharp 55。每次我创建一个新的ChromiumWebBrowser
时,一个新的CefSharp.BrowserSubprocess.exe出现在任务管理器中,这是正常的。但是当我在Dispose()
上拨打ChromiumWebBrowser
时,它们不会消失。当我关闭Apllication时它们才会消失,因为那时我打电话给Cef.Shutdown()
。处理后我尝试强制GC,但我没有改变任何东西。
因此,如果用户继续在Web浏览器中打开和关闭选项卡,我们最终会运行很多CefSharp.BrowserSubprocess,当应用程序关闭时,它们永远不会被关闭。
在扩展ChromiumWebBrowser
的类的构造函数中,我做
var requestContextSettings = new RequestContextSettings
{
PersistSessionCookies = false,
IgnoreCertificateErrors = true
};
RequestContext = new RequestContext(requestContextSettings);
当我处理浏览器时,请执行
browser.Dispose();
browser.RequestContext.Dispose()
我忘记了什么吗?
修改
显然,问题不仅限于CefSharp.BrowserSubprocess。当我处理播放YouTube视频的浏览器时,视频的声音仍然在运行。它之前正在工作,视频声音在处理后被切断。也许这是我最近更新的新版CefSharp中的一个错误。
答案 0 :(得分:4)
我发现了什么问题。我做了ILifeSpanHandler
的实现,我在DoClose(...)
中返回true,因为我返回true表示你告诉浏览器它可以关闭。但是在文档中它说要返回false以立即破坏浏览器。
(https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs)
执行此操作后,关闭相应的Web浏览器时,CefSharp.BrowserSubprocess将关闭。