Контроль WebBrowser в веб-приложении - PullRequest
9 голосов
/ 24 февраля 2010

Я пытался использовать элемент управления 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
        }

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

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

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

Ответы [ 5 ]

6 голосов
/ 24 февраля 2010

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

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

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

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

Cheer

0 голосов
/ 19 мая 2014

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

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

0 голосов
/ 27 февраля 2010

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

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

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

0 голосов
/ 27 февраля 2010

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

0 голосов
/ 24 февраля 2010

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

...