尝试加载新的URL时,Browser.Load会生成一个新的进程

时间:2019-02-09 19:13:28

标签: cefsharp chromium-embedded

我在WPF应用程序中嵌入了CefSharp浏览器,试图在其中加载WebPage。我也绑定了JavaScript对象使用 RegisterJsObject函数。这是必需的,因为网页JS会调用Native应用。

如果页面加载需要时间/任何错误,我已经实现了WatchDogTimer来切换到错误页面。 问题是,当尝试在超时的情况下加载错误页面时,它将杀死现有的CefSharp.BrowserSubprocess.exe并创建一个新文件。但这失去了JavaScript绑定,因此无法从JS调用Native App。

有什么方法可以避免创建CefSharp.BrowserSubprocess.exe的新进程?

1 个答案:

答案 0 :(得分:1)

您可以使用CefSettings类更改此行为。默认情况下,Chromium为用户访问的网站的每个实例创建一个渲染器进程,但是您可以对其进行更改

var settings = new CefSettings();

settings.CefCommandLineArgs.Add("renderer-process-limit", "0");    

Cef.Initialize(settings);

请注意,您必须先创建ChromiumWebBrowser的第一个实例。

重要提示:如amaitland在其下方的评论中所述,您应该非常小心地使用它,并且

  

仅当您使用单个浏览器实例时,您才可以   考虑这样做。单个进程中托管的多个实例可以   轻松耗尽内存,一次崩溃,它们都停止工作。   另外,如果渲染过程由于任何原因而崩溃,则新   实例不会绑定对象。

     

如果您使用的是旧版绑定,那么这是预期的,请参见http://cefsharp.github.io/api/71.0.0/html/P_CefSharp_CefSharpSettings_LegacyJavascriptBindingEnabled.htm

     

使用更新的绑定方法是最好的选择https://github.com/cefsharp/CefSharp/wiki/General-Usage#3-how-do-you-expose-a-net-class-to-javascript