首页 文章

ASP.net中的Web浏览器

提问于
浏览
1

我正试图在 ASP.net 中使用 WebBrowser ,但我发现了 Thread 的错误

WebBrowser webget = new WebBrowser();
        webget.Navigate("aaaaaa");
        HtmlDocument d = webget.Document;
        Console.WriteLine(d);
        Console.Read();

错误是:

无法实例化ActiveX控件'8856f961-340a-11d0-a96b-00c04fd705a2',因为当前线程不是单线程单元(STA)线程 .

1 回答

  • 0

    这是一种预期的行为,因为asp.net是为并发而设计的,并且由于使用了 STA 而不会产生任何问题

    试试这个

    string documentText= null;     
         var thread =  new Thread(() =>
         {
    
                 var webget = new WebBrowser();
                 webget.Navigated += webget_Navigated;
                 webget.Navigating += webget_Navigating;
                 webget.DocumentCompleted +=webget_DocumentCompleted;
                 webget.ScriptErrorsSuppressed = true;
    
    
                 webget.Navigate("http://hooooooooo.com");
                 while (documentText == null)
                 {
                     documentText = webget.DocumentText;
                 }
         });
         thread.SetApartmentState(ApartmentState.STA);    
            thread.Start();
            while (documentText == null)
            {
                var t = Task.Delay(TimeSpan.FromSeconds(1));
                Task.WaitAll(t);
            }
    

    如果你在asp.net中使用它,你应该做以下事情

    <system.web>     
        <httpRuntime apartmentThreading="true" targetFramework="4.6.2" />
      </system.web>
    

相关问题