当前位置:编程学习 > C#/ASP.NET >>

高手指教:幽灵一样的错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。(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
    {
        dynamic Iwb2;

        protected override void AttachInterfaces(object nativeActiveXObject)
        {
            Iwb2 = nativeActiveXObject;
            Iwb2.Silent = true;
            base.AttachInterfaces(nativeActiveXObject);
        }

        protected override void DetachInterfaces()
        {
            Iwb2 = null;
            base.DetachInterfaces();
        }
    }
--------------------编程问答-------------------- w

引用 4 楼 cdurl 的回复:
感谢大家的热心回复,不过问题要是那么简单就好了 

我首先提醒大家,别再其他的环境下测 切记,别的都没问题的。


干脆截个图吧,免得大家误会了错误

同时感谢大家的热心回复!

我想问下你这个问题解决了吗?我现在同样的问题困扰我,我的环境是 Win7 64为  IE10 也出现这个错误。 --------------------编程问答--------------------
引用 5 楼 caozhy 的回复:
我告诉你怎么解决吧。就是这个错误。

在窗体中添加如下代码:
protected override void WndProc(ref Message m)
{
    Program.Msg = m;
}
在Program中添加如下代码:
public static Message Msg;
然后运行你的程序。
出错的时候,将光标放在Msg上,看Msg是什么。
记录下来,然后按照我的程序修改。直到没有错误。

版主 你好,我用了你这个方法也报错,我也不知道怎么解决这个错误,或者抛出错误继续执行其他代码。 --------------------编程问答-------------------- 遇到同样的问题,各位有解决的办法没?求帮助啊!问题,各位有解决的办法没?求帮助啊!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,