关于WebBrowser.DocumentCompleted事件

今天发现使用WebBrowser时载入一个页面后DocumentCompleted事件会被调用2次,后来发现这两次WebBrowser的ReadyState状态是不一样的,第一次是Intercative,第二次是Complete。

MSDN上面对两个状态值的解释是:
Complete 该控件已完成新文档及其所有内容的加载。
Interactive 该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。

由此可见,当接受完成Html文本信息后会激发一次,当完成对Html相应的图片,外部其他媒体后会激发第二次。分别是Interactive和Complete。

所以,为了防止重复激活调用事件,还是只取一次的好,我取的是Complete
于是会在DocumentCompleted的相应方法中写入
if(webBrowser1.ReadyState!=WebBrowerReadyState.Complete)
return;

转载于:https://www.cnblogs.com/tishifu/archive/2008/01/04/1026440.html

WebBrowser.Navigate()方法在IE浏览器控制台中引发堆栈溢出错误通常是由于加载了包含复杂脚本或大量数据的网页,导致IE浏览器内存消耗过大。如果你想避免这种错误并且不让用户看到堆栈溢出的警告,有几种方法可以尝试: 1. **增加可用内存**:首先检查你的应用程序的内存限制,如果是.NET Framework应用,可以在代码中通过`AppDomain.CurrentDomain.SetData("MaxMemory", -1)`暂时禁用内存限制,但这并不是长久之计。 2. **分批加载**:如果你正在加载大内容,考虑将其拆分成小片段,逐步加载,而不是一次性全部加载。 3. **优化页面渲染**:尽量减少网页的DOM元素数量,避免不必要的CSS动画和JavaScript,以及大型图片,这些都可能导致内存占用过高。 4. **使用异步加载**:使用WebBrowserDocumentCompleted事件或者`. NavigateAsync()`方法,这样可以让后续的操作在网页加载完成后执行,而不是阻塞主线程。 5. **处理异常**:在调用`Navigate()`方法时添加一个`try-catch`块,捕获并处理`WebBrowserException`,并在`catch`块中记录错误日志,而不仅仅是显示错误消息给用户。例如: ```csharp try { webBrowser.Navigate(url); } catch (WebBrowserException ex) { // 记录错误日志 Log.Error($"WebBrowser Navigate error: {ex.Message}"); } ``` 尽管这样做了,堆栈溢出的问题本身还是存在的,只是不再直接展示给用户。然而,对于复杂的网站或者持续性的性能问题,最好从源头上优化网页设计和编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值