【问题标题】:WebBrowser Control in a web applicationWeb 应用程序中的 WebBrowser 控件
【发布时间】:2011-01-20 10:13:39
【问题描述】:

我尝试在 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 的网页的屏幕截图。 :(

【问题讨论】:

  • 虽然您要求提供解决方案,但只是想...一种实现相同目的的方法是创建一个 ActiveX 控件来执行屏幕截图工作,并将其添加到您的 ASP.NET 应用程序...

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


【解决方案1】:

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

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

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

希望对你有帮助

欢呼

【讨论】:

  • 他是如何处理这个 STA 线程问题的?我不认为这个答案有用。你能否详细说明他是如何处理这个问题的,我看不到。仅指向另一个页面的链接不是很好的解释...
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    WinInet is not supported for use in services,表示任何使用 WinInet 的应用程序,例如 IE 的 webbrowser 控件,在服务(例如 asp.net 服务)中不受支持。

    【讨论】:

      【解决方案4】:

      为什么在基于 asp.net 的应用程序中使用 webbrowser 控件?
      看起来您希望在浏览器中拥有一个浏览器。

      使用它,您将限制观众使用 IE(我想是 Windows)。

      您不能使用 IFrame 或 Ajax 或其他替代方法吗?
      发表您的理由,人们可能会提出更好的选择。

      【讨论】:

      • 问“为什么?”在这种情况下会适得其反。要么给出答案,要么提出一种完成任务的方法:“......尝试将 WindowApplication 转换为 WebApplication,它会截取提供 URL 的网页的屏幕截图。”
      • 为什么?因为我想将 HTML 页面打印到打印机上,而您应该使用 WebBrowser。
      【解决方案5】:

      我还尝试在我的 .Net 页面中使用 WebBrowser 控件。发现这篇文章正好回答了你的问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-04
        • 2010-11-06
        • 1970-01-01
        • 2011-07-28
        • 2010-10-15
        • 2012-02-15
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多