[英]Why keeps the ChromiumWebBrowser form CefSharp/WinForms in loading state
I'm developing a plugin for a x64 application in c# with .NET-framework which needs a webbrowser.我正在为 c# 中的 x64 应用程序开发一个插件,该插件需要一个网络浏览器。 I decided to use CefSharp in verison 83.4.2 as browser framework.
我决定在 83.4.2 版本中使用 CefSharp 作为浏览器框架。 I'm able to initialize the CEF and can create the winforms control.
我能够初始化 CEF 并可以创建 winforms 控件。 After the
IsBrowserIsInitializedChanged
was triggered, I start loading a url.触发
IsBrowserIsInitializedChanged
后,我开始加载 url。 The problem I have now is, that the browser flag IsLoading
only changes from false to true, but did not change back after loading.我现在遇到的问题是,浏览器标志
IsLoading
仅从 false 更改为 true,但在加载后没有变回。
I tried to use the x86 version, but this is not possible in the external program.我尝试使用x86版本,但这在外部程序中是不可能的。 I added an eventhandler for the
LoadingStateChanged
event for tests and so I found out that the flag is only set once.我为测试的
LoadingStateChanged
事件添加了一个事件处理程序,因此我发现该标志只设置了一次。
Here are some code snippets:以下是一些代码片段:
{
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: Your hint with removing the handlers was the solution. @amaitland:您删除处理程序的提示是解决方案。
Now I need to find the problem in the handlers, because I need at least two of them.现在我需要在处理程序中找到问题,因为我至少需要其中两个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.