2 donghangdh12 donghangdh12 于 2014.08.14 14:15 提问

asp.net使用WebBrowser,DocumentCompleted重载sender参数为null
public partial class WebForm1 : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string url = "网站地址";
            WebBrowser wb = new WebBrowser();
            wb.Url = new Uri(url);
            wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);//添加document加载完毕委托事件
        }
    }

    void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlDocument doc = ((WebBrowser)sender).Document;//进入事件后,sender的document属性为null,为什么会为null?
        ((WebBrowser)sender).Dispose();
    }
}

我就是想在asp.net里面通过winfrom中强大的webbrowser来获取html的DOM对象。但是经过测试,在进入委托事件之前,webbrowser已经有了document属性值了,但是ReadyState属性还是loading,当页面加载完毕后Complete,执行委托时间后,document的属性值却变成null了,为什么?

1个回答

qq_20354713
qq_20354713   2015.09.16 13:54
WebBrowser wb = new WebBrowser(); 就应该出错了
    /”应用程序中的服务器错误。

当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Threading.ThreadStateException: 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。

源错误:

行 16: {
行 17: string url = "网站地址";
行 18: WebBrowser wb = new WebBrowser();

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
谨慎注意WebBrowser控件的DocumentCompleted事件
来自:斯克迪亚个人博客 http://skyd.cnblogs.com/ http://www.csharpwin.com/dotnetspace/1185.shtml 摘要:WebBrowser控件的DocumentCompleted事件一般就被认定为是在页面完全加载完毕后产生,但事实却并非如此。首先它不一定会在完全加载完毕时才触发,有时就会在加载过程中就会触发。
WebBrowser让DocumentCompleted事件执行完毕后再往下执行
 Q:WebBrowser如何让DocumentCompleted事件执行完毕后再往下执行?A:使用信号量,等待一下System.Threading.AutoResetEvent obj = new System.Threading.AutoResetEvent(false);        void webBrowser1_Do
C# WebBrowser.DocumentCompleted 多次调用解决方法(转)
大概出现了以下几种情况。 1、WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载;Interactive该控件已经加载足够的文档以允许有限的用户交互,比如单击已显示的超链接。由此可见,
C#解决WebBrowser DocumentComplete一个网页多次触发
关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况。 1、WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete。而MSDN对这两种状态
Java重载,当参数为null时,调用情况
有如下代码: public class MainTest { public void m(String s){ System.out.println("22222"); } public void m(Object e){ System.out.println("11111"); } public static v
Java重载函数,当参数为null时,调用的处理
精确性原则 关于以下程序的输出结果: public class TestNull { public void show(String a){ System.out.println("String"); } public void show(Object o){ System.out.println("Object"); } public static void ma
Asp.Net之Object sender,EventArgs e的认识
  带有Object   sender,EventArgs   e   参数的函数是事件处理函数。sender表示引发此事件的对象,e是事件参数,根据事件的不同,事件参数类型可能不同。但都以EventArgs为基类,普通函数不需要带这些参数。    如:Web控件:  处理函数: protected void smtDownList(object sender, EventArg
Java中函数重载和null参数的传递
<br />今天读代码发现有一行代码很奇怪:<br />setData((Hashtable)null);<br />为什么要对null进行一个转型呢?仔细一研究,发现原来是函数重载引起的:<br />这个类里面有2个setData方法,而且参数都只有一个,如下:<br />setData(DefaultEntity e);<br />setData(Hashtable e);<br />Java会根据传入的参数来判断调用的是那个方法,但是如果传入的值是null,那么就需要进行一个类型转换,来告诉Java需
关于java重载函数,参数为null时,调用的处理。(精确性原则)
<br />关于以下程序的输出结果<br /> <br /> <br />public class TestNull { public void show(String a){ System.out.println("String"); } public void show(Object o){ System.out.println("Object"); } public static void main(String args[]){ TestMain t = new TestMain()
方法重载参数为null时处理方案
public class Demo02 { public void testDemo(String a , String b){ System.out.print(a + b); } public void testDemo(String a , Integer b){ System.out.print(a + "Integer" + b);