读书人

c#在多线程下访问WebBrowser对象报错误

发布时间: 2012-06-05 13:54:06 作者: rapoo

c#_在多线程下访问WebBrowser对象报异常,"指定的转换无效。"
在 WebBrowser控件的DocumentCompleted事件里面激活了一个异步函数,这个函数的作用是根据传入的url,在WebBrowser里面所有的窗体里面搜索指定url的页面,如果检索到折返回这个htmlDocument的对象,可以每次运行到这个异步函数的时候就报错,我用调试在这个函数里面调试的时候,WebBrowser下的所有对象都显示函数超时,无法正常进行调试请高手指点.下面是部分代码

C# code
        /// <summary>        /// WebBrowser页面加载完成事件        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void myWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)        {            switch (e.Url.AbsoluteUri)            {                case "127.0.0.1/test2_2.aspx":                    addFunction(set1 );                    break;                default:                    break;            }        }        /// <summary>        /// 获取指定的页面框架        /// </summary>        /// <param name="url"></param>        /// <returns></returns>        HtmlDocument getDom(   string url)        {            try            {                if (url == "")                {                    ////这个位置特别容易报错                    return myWebBrowser.Document;                }                 if (myWebBrowser.Document.Url.AbsoluteUri == url) ////这个位置特别容易报错                {                    return myWebBrowser.Document;                }                foreach (HtmlWindow item in myWebBrowser.Document.Window.Frames)                {                    if (item.Document.Url.AbsoluteUri == url)                    {                        return item.Document;                    }                }                return null;            }            catch (Exception e)            {                return null;            }        }


DocumentCompleted 事件和 getdom函数不是在一个线程里面运行的,
DocumentCompleted 事件调用addFunction()函数,addFunction()函数会新起一个线程,在新线程上运行set1函数,set函数里面调用的第一个函数就是 getdom()函数.就在这个getdom()函数里面报错.

[解决办法]
顶...

读书人网 >C#

热点推荐