Проблема с использованием winforms WebBrowser в asp.net

Я использую элемент управления WebBrowser на странице asp.net. вот простой код:

Public Class _Default
 Inherits System.Web.UI.Page
 Private WithEvents browser As WebBrowser
 Dim th As New Threading.Thread(AddressOf ThreadStart)
 Sub ThreadStart()
 browser = New WebBrowser
 AddHandler browser.DocumentCompleted, AddressOf browser_DocumentCompleted
 browser.Navigate("http://www.someurl.com/")
 End Sub
 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 th.SetApartmentState(Threading.ApartmentState.STA)
 th.Start()
 th.Join()
 End Sub
 Private Sub browser_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
 If browser.Document IsNot Nothing Then
 Dim textbox As HtmlElement = browser.Document.GetElementById("txt1")
 textbox.InnerText = "some text"
 Dim button As HtmlElement = browser.Document.GetElementById("btn1")
 button.InvokeMember("click")
 End If
 End Sub
End Class

проблема заключается в том, что событие webbrowser DocumentCompleted не обрабатывается. Похоже, что запрос страницы заканчивается, прежде чем что-нибудь еще произойдет. какое решение этой проблемы?

2 ответа

Я действительно рекомендую прочитать эту статью (он выиграл за нее цену).

Использование элемента управления WebBrowser в ASP.NET http://www.codeproject.com/KB/aspnet/WebBrowser.aspx

Его решение состоит в том, чтобы создать 3 потока для его работы.


Я не уверен, но у меня есть некоторые сомнения относительно того, как вы написали свой код.

Вы создаете и инициализируете свой поток, как только создается экземпляр класса. Это до того, как форма была загружена.

Я не могу сказать наверняка, что это не сработало, но я бы определенно рекомендовал создать поток в обработчике событий загрузки, прежде чем вы его используете.

Я написал некоторый похожий код в С# для создания эскиза веб-сайта. Хотя этот код не использует событие DocumentCompleted, я играл с этим событием, когда писал его, и, похоже, он работает нормально. Вы можете сравнить мой код с вашим.

Кроме того, я должен упомянуть, что у меня есть одна учетная запись хостинга, где код не работает. Кажется, просто умирает, когда я называю Thread.Join. Однако, похоже, что проблема, с которой вы столкнулись.

licensed under cc by-sa 3.0 with attribution.