当ChromiumWebBrowser为Disposed时,CefSharp.BrowserSubprocess不会关闭

时间:2017-08-28 12:52:41

标签: c# wpf cefsharp

我在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中的一个错误。

1 个答案:

答案 0 :(得分:4)

我发现了什么问题。我做了ILifeSpanHandler的实现,我在DoClose(...)中返回true,因为我返回true表示你告诉浏览器它可以关闭。但是在文档中它说要返回false以立即破坏浏览器。

https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs

执行此操作后,关闭相应的Web浏览器时,CefSharp.BrowserSubprocess将关闭。