Управление WebBrowser в веб-приложении

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

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.: (

9
задан Foole 24 February 2010 в 09:30
поделиться

4 ответа

Ознакомьтесь с этой статьей проекта кода Использование элемента управления WebBrowser в ASP.NET .

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

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

Надеюсь, это поможет

Подбодритесь

6
ответ дан 4 December 2019 в 23:39
поделиться

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

0
ответ дан 4 December 2019 в 23:39
поделиться

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

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

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

0
ответ дан 4 December 2019 в 23:39
поделиться

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

0
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: