如何解决为什么将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);
}
- WebBrowserControl的构造函数
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:删除处理程序的提示就是解决方案。
现在我需要在处理程序中查找问题,因为我至少需要两个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。