为什么将ChromiumWebBrowser表单CefSharp / WinForms保持在加载状态

问题描述

我正在使用.NET-framework为需要Web浏览器的.NET开发x64应用程序的插件。我决定在版本83.4.2中使用CefSharp作为浏览器框架。我能够初始化CEF并可以创建Winforms控件。 触发IsbrowserIsInitializedChanged之后,我开始加载网址。我现在遇到的问题是,浏览器标志IsLoading仅从false更改为true,而在加载后没有更改。

我试图使用x86版本,但是在外部程序中这是不可能的。我为测试的LoadingStateChanged事件添加一个事件处理程序,因此我发现该标志仅设置了一次。

以下是一些代码段:

  • 使用的设置
{
   browserSubprocesspath = subprocess,CachePath = Path.Combine(cefAppdataPath,"Cache"),IgnoreCertificateErrors = false,Locale = currentCultureName,LocalesDirPath = Path.Combine(runtimepath,"locales"),LogSeverity = LogSeverity.Verbose,//Info //Verbose //Default
   LogFile = Path.Combine(cefAppdataPath,"cef.log"),MultiThreadedMessageLoop = true,PersistSessionCookies = true,PersistUserPreferences = true,RemoteDebuggingPort = 20480,ResourcesDirPath = Path.Combine(runtimepath),UserAgent = "CustomUseragent with " + CefSharp.Cef.ChromiumVersion,UserDataPath = Path.Combine(cefAppdataPath,"UserData")
}
_settings.CefCommandLineArgs.Add("enable-media-stream");
_settings.CefCommandLineArgs.Add("force-device-scale-factor","1");
_settings.CefCommandLineArgs.Add("no-proxy-server");
InitCef();
if (!havePalette("GISX"))
    {
        log.Debug("Create palette browser");
        var browserControl = new WebbrowserControl(App,GisxApp.Startpage,null);
        browserControl.Create();
        browserControl.isInitialized.WaitOne();
        App.browserControl = browserControl;
        log.Debug("Add palette browser");
        myPaletteSet.Add("GISX",browserControl);
    }
ChromiumWebbrowser Webbrowser = new ChromiumWebbrowser(homeurl)
{Dock = DockStyle.Fill};
Webbrowser.DownloadHandler = new WebDownloadHandler();
Webbrowser.LifeSpanHandler = new WebLifeSpanHandler(false);
Webbrowser.JsDialogHandler = (IJsDialogHandler)new WebJSDialogHandler();
Webbrowser.KeyboardHandler = new WebKeyboardHandler();
Webbrowser.MenuHandler = new WebContextMenuHandler(homeUrl);
Webbrowser.RenderProcessMessageHandler = new WebRenderbrowserProcessManager();
Webbrowser.displayHandler = new WebdisplayHandler();

this.Controls.Add(Webbrowser);

Webbrowser.IsbrowserInitializedChanged += new EventHandler(browserCreated);
Webbrowser.IsbrowserInitializedChanged += new EventHandler(InitializesationChanged);
Webbrowser.LoadingStateChanged += Webbrowser_LoadingStateChanged;

解决方法

@amaitland:删除处理程序的提示就是解决方案。

现在我需要在处理程序中查找问题,因为我至少需要两个。