2010-02-24 121 views
9

我試圖使用WebBrowser控件在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' cannot be instantiated because the current thread is not in a single-threaded apartment

然後我做了這樣的事情:

 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 
     } 

但是它仍然不能滿足我的需求......給我這樣的錯誤:

Error HRESULT E_FAIL has been returned from a call to a COM component

任何工作?我不是線程或COM的專家,但是嘗試將WindowApplication轉換爲WebApplication,它使用網頁的屏幕截圖提供了一個URL。 :(

+0

雖然你問了一個解決方案,但只是在想......一個途徑達到相同的創建ActiveX控件,會做的屏幕截圖的工作,並把它添加到您的ASP.NET應用程序... – 2010-02-24 12:19:28

回答

6

入住這CodeProject上的文章Using the WebBrowser Control in ASP.NET

在這篇文章中去的技術規格部分,在那裏你可以看到他是如何處理這個STA線程問題。

First of all, a WebBrowser control has to be in a thread set to single thread apartment (STA) mode (see MSDN), so I need to create a thread and call the SetApartmentState() method to set it to ApartmentState.STA before starting it.

希望這有助於

Cheer

+1

他如何處理這個STA線程問題?我沒有看到這個答案是有用的。請你詳細說明他是如何處理這個問題的,我看不到它。 這是不好的解釋,指向只有鏈接到另一個頁面... – 2015-03-20 13:28:57

0

您可以在網頁的頁面指令設置AspCompat =「true」,並會在STA運行。你做了之後,你的第一個例子應該工作

0

爲什麼在基於asp.net的應用程序中使用webbrowser控件?
它看起來像你想在瀏覽器中有一個瀏覽器。

使用它,你正在限制觀衆使用IE(和Windows,我想)。

難道你不能使用IFrame或Ajax或其他一些替代?
發佈你的原因&人們可能會建議一個更好的選擇。

+0

問「爲什麼?」在這種情況下是反生產的。要麼給出答案,要麼提出一種完成任務的方法:「...嘗試將WindowApplication轉換爲WebApplication,該WebApplication使用網頁的屏幕截圖提供了一個URL。」 – Dror 2014-04-03 10:39:23

+0

爲什麼?因爲我想打印一個HTML頁面到打印機,你應該使用WebBrowser。 – 2016-12-19 18:25:25