C# 释放ChromiumWebBrowser时,CefSharp.BrowserSubprocess未关闭

C# 释放ChromiumWebBrowser时,CefSharp.BrowserSubprocess未关闭,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我正在WPF中使用CefSharp 55。每次我创建一个新的ChromiumWebBrowser,任务管理器中都会出现一个新的CefSharp.BrowserSubprocess.exe,这是正常的。但是,当我在ChromiumWebBrowser上调用Dispose()时,它们不会消失。它们只有在我关闭应用程序时才会消失,可能是因为当时我调用了Cef.Shutdown()。我试图在处理后强制GC,但我没有更改任何内容 因此,如果用户继续在web浏览器中打开和关闭选项卡,我们最终会运行大量Cef

我正在WPF中使用CefSharp 55。每次我创建一个新的
ChromiumWebBrowser
,任务管理器中都会出现一个新的CefSharp.BrowserSubprocess.exe,这是正常的。但是,当我在
ChromiumWebBrowser
上调用
Dispose()
时,它们不会消失。它们只有在我关闭应用程序时才会消失,可能是因为当时我调用了
Cef.Shutdown()
。我试图在处理后强制GC,但我没有更改任何内容

因此,如果用户继续在web浏览器中打开和关闭选项卡,我们最终会运行大量CefSharp.browser子进程,这些子进程在应用程序关闭时将永远不会关闭

在类的构造函数中,扩展了ChromiumWebBrowser

var requestContextSettings = new RequestContextSettings
{
    PersistSessionCookies = false,
    IgnoreCertificateErrors = true
};

RequestContext = new RequestContext(requestContextSettings);
处理浏览器时,请执行以下操作:

browser.Dispose();
browser.RequestContext.Dispose()
我忘了什么吗

编辑


显然,问题并不局限于CefSharp.browser子流程。当我配置浏览器播放youtube视频时,视频的声音仍在运行。它之前工作,视频声音在处理后被切断。可能是我最近更新的新版CefSharp中的一个bug。

我发现了问题所在。我实现了
ILifeSpanHandler
,在
DoClose(…)
中返回true,因为我认为返回true意味着你告诉浏览器它可以关闭。但是在文档中它说返回false会立即破坏浏览器

()


完成此操作后,当我关闭相应的web浏览器时,CefSharp.browser子进程将关闭。

您不必担心。阅读我阅读了流程部分。它解释了多个进程将被spawed,但没有说明它们在应用程序关闭之前保持活动状态是否正常。我做了一个测试,不断打开和关闭web浏览器选项卡。我很快就失去了记忆。我们的应用程序应该整天都在运行而不重新启动。它不会持续到一天结束。
returnfalse
是正确的
Cef.Shutdown()
可以关闭
BrowserSubprocess
,但我的主线程仍然没有退出?我忘了什么吗?@salamander我也有同样的问题,你发现了什么吗?