Элемент управления WebBrowser в веб-приложении

Я попытался использовать элемент управления WebBrowser в приложении ASP .NET:

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
        }

но все равно это не работает для меня, как хотелось бы...давая мне weired ошибки, такие как:

ошибка HRESULT E_FAIL имеет были возвращены от вызова компонента COM

любой обойти?? Я не эксперт по потокам или COM, но пытаюсь преобразовать WindowApplication в WebApplication, который делает снимок экрана веб-страницы с URL-адресом. :(

5 ответов


проверьте эту статью codeproject использование элемента управления WebBrowser в ASP.NET.

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

прежде всего, элемент управления WebBrowser имеет быть в потоке, установленном в один поток режим квартиры (STA) (см. MSDN), поэтому я необходимо создать поток и вызвать SetApartmentState () метод для его установки к Apartmentstate используется.STA перед началом он.

надеюсь, что это помогает

Ура


вы можете установить AspCompat= "true" в директиве страницы страницы, и она будет работать в STA. После того, как вы сделали это, ваш первый пример должен работать


WinInet не поддерживается для использования в службах, что означает, что любое приложение, использующее WinInet, например элемент управления WebBrowser IE, не поддерживается в службах (например asp.net услуги).


Почему вы используете элемент управления webbrowser в asp.net на основе приложения?
Похоже, вы хотите иметь браузер внутри браузера.

используя его, вы ограничиваете аудиторию для использования IE (и Windows, я полагаю).

не можете ли вы использовать IFrame или Ajax или какую-либо другую альтернативу?
Разместить свои причины и люди могут предложить лучшую альтернативу.


Я также пытался использовать элемент управления WebBrowser на моей странице .Net. Нашел эту статью, которая точно отвечает на ваш вопрос.

захват экрана (снимок) изображения на сайте (веб-странице) в ASP.Net с помощью C# и VB.Net