Web应用程序中的WebBrowser控件

时间:2010-02-24 07:28:18

标签: c# .net asp.net webbrowser-control

我尝试在ASP .NET应用程序中使用WebBrowser控件:

public BrowserForm()
        {
            webBrowser1 = new WebBrowser();
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        }
private void webBrowser1_DocumentCompleted(Object sender, WebBrowserDocumentCompletedEventArgs e)
    {
   // code here
    }

但得到了错误:

  

'{8856F961-340A-11D0-A96B-00c04fd705a2'   无法实例化,因为   当前线程不在   单线程公寓

然后我做了这样的事情:

     public BrowserForm()
        {
            ThreadStart ts = new ThreadStart(StartThread);
            var t = new Thread(ts);
            t.SetApartmentState(ApartmentState.STA);
            t.Start();

        }
        [STAThread]
        public void StartThread()
        {
            webBrowser1 = new WebBrowser();
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        }

        [STAThread]
 private void webBrowser1_DocumentCompleted(Object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           //code here
        }

但是仍然没有按照我的意愿为我工作......给我一些错误的错误,如:

  

错误HRESULT已返回E_FAIL   从调用COM组件

任何工作?我不是线程或COM的专家,但是尝试将WindowApplication转换为WebApplication,它使用网页的屏幕截图提供了一个URL。 :(

5 个答案:

答案 0 :(得分:6)

检查此代码项目文章Using the WebBrowser Control in ASP.NET

在那篇文章中,转到技术规范部分,在那里你可以看到他是如何处理这个STA线程问题的。

  

首先,WebBrowser控件具有   在一个线程设置为单线程   公寓(STA)模式(见MSDN),所以我   需要创建一个线程并调用   SetApartmentState()方法来设置它   在开始之前到ApartmentState.STA   它

希望这有帮助

啦啦队

答案 1 :(得分:0)

您可以在页面的page指令中设置AspCompat =“true”,它将在STA中运行。完成后,您的第一个示例应该正常工作

答案 2 :(得分:0)

WinInet is not supported for use in services,这意味着任何使用WinInet的应用程序,例如IE的webbrowser控件,都不支持服务(例如asp.net服务)。

答案 3 :(得分:0)

为什么在基于asp.net的应用程序中使用webbrowser控件?
看起来你想在浏览器中安装一个浏览器。

使用它,你限制观众使用IE(和我想的Windows)。

你不能使用IFrame或Ajax或其他替代方案吗?
发布你的理由&人们可能会提出更好的选择。

答案 4 :(得分:0)

我还试图在我的.Net页面中使用WebBrowser控件。找到这篇文章准确回答了你的问题。

Capture Screenshot (Snapshot) Image of Website (Web Page) in ASP.Net using C# and VB.Net