高手指教:幽灵一样的错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。(about:WebBrowser)
不得不发个帖,实在是不知道说什么才好调试种种不予多说,先简述状况,欢迎围观以及测试。
我的一个程序, 调用了WebBrowser,一直运行良好,直到某天运行到 XP+ie8 就悲剧了
大家可以做一个最简单的工程,.net2.0 环境
一个winform + 一个 webbrowser + 一个按钮,如下:
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("http://t.sohu.com");
}
呵呵,很简单吧,就是这么简单的代码,一样报错。易做图么?
不信在load完毕的webBrowser1里面右键,刷新一下。 错误出来了么?
说实话别的网页都没问题, 就这个t.sohu.com, 我没时间看他的js之类的代码,但是。难道是js导致的?不应该啊,我初步判定可能是 webbrowser 的bug,
省略n多调试,
还是不行,于是乎,打开ie,直接加载,刷新。 果然没问题。
怀疑js,
按f12.但后启动js调试, 然后去刷新。奇迹出现了:!!!
iexplore.exe 中的 0x3db8958f 处有未经处理的异常: 0xC0000005: 读取位置 0x000000a4 时发生访问冲突。
目前正在寻找ie8的补丁中,先写这么多 --------------------编程问答-------------------- 这应该是.NET的BUG。
试试看下面的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private bool fixbug = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("http://t.sohu.com");
}
protected override void WndProc(ref Message m)
{
if ((m.Msg != 0x2a1 && m.Msg != 0x2a3) || !fixbug)
base.WndProc(ref m);
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
fixbug = false;
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
fixbug = true;
}
}
}
在我这里可以修复这个bug。原理是在装载网页的时候忽略掉两个可能导致出错的消息。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 这个肯定不是webbrowser 的bug,应该是http://t.sohu.com脚本错误的问题,我建议禁用脚本错误提示信息
webBrowser1.ScriptErrorsSuppressed = true; --------------------编程问答-------------------- 感谢大家的热心回复,不过问题要是那么简单就好了
我首先提醒大家,别再其他的环境下测 切记,别的都没问题的。
干脆截个图吧,免得大家误会了错误
同时感谢大家的热心回复! --------------------编程问答-------------------- 我告诉你怎么解决吧。就是这个错误。
在窗体中添加如下代码:
protected override void WndProc(ref Message m)
{
Program.Msg = m;
}
在Program中添加如下代码:
public static Message Msg;
然后运行你的程序。
出错的时候,将光标放在Msg上,看Msg是什么。
记录下来,然后按照我的程序修改。直到没有错误。 --------------------编程问答--------------------
public class MyWebBrowser : WebBrowser--------------------编程问答-------------------- w
{
dynamic Iwb2;
protected override void AttachInte易做图ces(object nativeActiveXObject)
{
Iwb2 = nativeActiveXObject;
Iwb2.Silent = true;
base.AttachInte易做图ces(nativeActiveXObject);
}
protected override void DetachInte易做图ces()
{
Iwb2 = null;
base.DetachInte易做图ces();
}
}
我想问下你这个问题解决了吗?我现在同样的问题困扰我,我的环境是 Win7 64为 IE10 也出现这个错误。 --------------------编程问答--------------------
版主 你好,我用了你这个方法也报错,我也不知道怎么解决这个错误,或者抛出错误继续执行其他代码。 --------------------编程问答-------------------- 遇到同样的问题,各位有解决的办法没?求帮助啊!问题,各位有解决的办法没?求帮助啊!
补充:.NET技术 , C#