private void _GetWebSiteThumbnail()
        {
            WebBrowser wbWebBrowser = new WebBrowser();
            wbWebBrowser.ScrollBarsEnabled = false;
            wbWebBrowser.Navigated += new WebBrowserNavigatedEventHandler(wbWebBrowser_Navigated); 
            wbWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbWebBrowser_DocumentCompleted);
            wbWebBrowser.ScriptErrorsSuppressed = true;
            wbWebBrowser.ClientSize = new Size(WebSiteThumbnail.intThumbnailWidth, WebSiteThumbnail.intThumbnailHeight);
            wbWebBrowser.Navigate("http://" + this.strDomain);
            long lgTimeout = intTimeout * 10000000;       //设置超时时间,防止有些网站一直在加载,不完成
            long tempTicks = DateTime.Now.Ticks;
            while (wbWebBrowser.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
                if ((DateTime.Now.Ticks - tempTicks) > lgTimeout)
                {
                    wbWebBrowser_DocumentCompleted(wbWebBrowser, null);
                    break;
                }
            }
            wbWebBrowser.Dispose();
            blThumbnailCompleted = true;
        }我想弄一个把网站首页保存成截图的功能.在网上找的代码,自己修改了一下.
主要的代码是上面这个,每个线程都会做上面的操作,创建一个WebBrowser对象,使用完之后释放.
现在的问题就是,如果是直接调用,或者是按顺序来调用的话,是正常的.
我开几个线程来做的话,执行过程中不定期地会出现错误提示:
AccessViolationException,尝试读取或写入受保护的内存。这通常指示其他内存已损坏.
错误在while (wbWebBrowser.ReadyState != WebBrowserReadyState.Complete)这一句上
请问这个可能是什么问题呢,这样的错误应该怎样来调试呢,每次出现问题时访问的网站都是不一样的,是随机出现的.

解决方案 »

  1.   

    问题应该是那几个webbrowser的事件问题,多线程导致多个结果同时触发这几个事件,造成访问违规,你最好还是同步一下吧
      

  2.   

    每个webbrowser都是各个线程自己创建的,也有同步的问题吗
      

  3.   

    另外,如果像我这样每个线程内创建webbrowser,也不能同时触发事件的话,怎样对事件的触发进行同步呢.是不是要这样:
    一个线程中的webbrowser访问完网站完成,但发现已经有另外一个线程的webbrowser在做wbWebBrowser_DocumentCompleted事件中的操作,它就会等待?等处理完以后再触发这个事件?
    在同步处理中用什么可以达到这个效果呢
      

  4.   

    请问这个最后你怎么解决了? 上面说的同步问题 存在吗 我写了一个和你的相似  出现的问题一样,我也是感觉DocumentCompleted事件存在一次同时实行几遍的问题  因为保存数据的时候数据的条数确实多了很多(是个线程正常情况下应该是十条,但我的总是十条多还不确定),总会存在几条数据一样
      

  5.   

    请问这个最后你怎么解决了? 上面说的同步问题 存在吗 我写了一个和你的相似 出现的问题一样,我也是感觉DocumentCompleted事件存在一次触发同时执行几遍的问题 因为保存数据的时候数据的条数确实多了很多(十个线程正常情况下应该是十条,但我的总是十条多还不确定),总会存在几条数据一样