Я пытался использовать управление 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.: (
Ознакомьтесь с этой статьей проекта кода Использование элемента управления WebBrowser в ASP.NET .
В этой статье перейдите в раздел «Технические характеристики», и там вы увидите, как он справился с этой проблемой потока STA.
Прежде всего, элемент управления WebBrowser должен находиться в потоке, установленном в однопоточном режиме квартиры (STA) (см. MSDN ), поэтому я {{ 1}} необходимо создать поток и вызвать метод SetApartmentState (), чтобы установить для него значение ApartmentState.STA перед его запуском .
Надеюсь, это поможет
Подбодритесь
Вы можете установить AspCompat = "true" в директиве страницы, и она будет выполняться в STA. После того, как вы это сделаете, ваш первый пример должен работать
Почему вы используете элемент управления веб-браузер в приложении на основе asp.net?
Похоже, вы хотите иметь браузер внутри браузера.
Используя его, вы ограничиваете аудиторию в использовании IE (и Windows, я полагаю).
Разве вы не можете использовать IFrame, Ajax или другую альтернативу?
Опубликуйте свои причины, и люди могут предложить лучшую альтернативу.
WinInet не поддерживается для использования в службах , что означает, что любое приложение, использующее WinInet, например элемент управления веб-браузером IE, не поддерживается в службах. (например, услуги asp.net).