2013-02-15 47 views
1

如何在asp.net页面后面的代码中使用webbrowser控件。我得到这个错误:调用webbrowser控制asp.net页面错误后面的代码?

ActiveX控件无法实例化,因为当前线程不在单线程单元中。

感谢您的帮助要在ASP.NET应用程序使用web浏览器幕后

Imports System.Windows.Forms 
Imports System.Drawing 
Imports System.Drawing.Imaging 
Imports System.Web.UI.WebControls 

Partial Class _Default 

    Dim testcontrol As New WebBrowser() ' it breaks here 

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 

     testcontrol.Navigate("mysite") 

    End Sub 

End Class 
+0

为什么Page_Load中不公开?主站点是另一个文件,因此要捕获传播事件(Page_Load),处理程序需要公开。 – Vogel612 2013-02-15 13:32:28

+0

其不公开,因为它如何自动添加 – 2013-02-15 13:37:25

+0

嗯有道理。你确定你不需要重载WebBrowser吗? – Vogel612 2013-02-15 13:39:41

回答

1

为什么呢?如果您需要与另一台服务器上的网页进行交互,通常人们会使用HttpWebRequest来执行此操作。

如果我错了,那里有人可以纠正我,但我相信一个Web应用程序,几乎按定义,不能是单线程的。 Web应用程序旨在成为多用户,可以做多件事,并且可以同时容纳多个用户。

+0

嗨 - 感谢回复 - 我正在尝试做的是在不加载它的情况下拍摄另一个页面的屏幕截图。在一个Windows窗体和一个Windows控制台应用程序,我可以做到这一点,这一定是可以在网络应用程序? – 2013-02-18 06:31:04

+0

@ Hello-World通过“屏幕截图”,你的意思是创建一个页面将如何显示的图像?或者做一个页面的HTML的刮?该网页与您的应用是同一个网域还是完全不同? – 2013-02-18 14:30:34

+0

我试图让内部网上的另一页的图像,但它在几个不同的域 – 2013-02-19 14:02:37

0

这是工作:

/// <summary> 
     /// Returns a thumbnail for the current member values 
     /// </summary> 
     /// <returns>Thumbnail bitmap</returns> 
     protected Bitmap GetThumbnail() 
     { 
      try 
      { 
      // WebBrowser is an ActiveX control that must be run in a single-threaded 
      // apartment so create a thread to create the control and generate the 
      // thumbnail 
      Thread thread = new Thread(new ThreadStart(GetThumbnailWorker)); 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
      thread.Join(); 
      return _bmp; 
      } 
      catch (Exception ex) 
      { 
       using (StreamWriter writer = new StreamWriter("log.txt", true)) 
       { 
        writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString())); 
        writer.Flush(); 
        writer.Close(); 
       } 
       return null; 
      } 
     } 


/// <summary> 
     /// Creates a WebBrowser control to generate the thumbnail image 
     /// Must be called from a single-threaded apartment 
     /// </summary> 
     protected void GetThumbnailWorker() 
     { 
      try 
      { 
       using (WebBrowser browser = new WebBrowser()) 
       { 
        browser.ClientSize = new Size(_width, _height); 
        //browser.ScrollBarsEnabled = false; 
        browser.ScriptErrorsSuppressed = true; 
        browser.Navigate(_url); 
        // Wait for control to load page 
        while (browser.ReadyState != WebBrowserReadyState.Complete) 
         Application.DoEvents(); 
        // Render browser content to bitmap 
        _bmp = new Bitmap(_thumbWidth, _thumbHeight); 
        browser.DrawToBitmap(_bmp, new Rectangle(0, 0, _thumbWidth, _thumbHeight)); 
       } 
      } 
      catch (Exception ex) 
      { 
       using (StreamWriter writer = new StreamWriter("log.txt", true)) 
       { 
        writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString())); 
        writer.Flush(); 
        writer.Close(); 
       } 
      } 
     } 
相关问题