我尝试在ASP .NET应用程序中使用WebBrowser控件:
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。 :(
答案 0 :(得分:6)
检查此代码项目文章Using the WebBrowser Control in ASP.NET。
在那篇文章中,转到技术规范部分,在那里你可以看到他是如何处理这个STA线程问题的。
首先,WebBrowser控件具有 在一个线程设置为单线程 公寓(STA)模式(见MSDN),所以我 需要创建一个线程并调用 SetApartmentState()方法来设置它 在开始之前到ApartmentState.STA 它
希望这有帮助
啦啦队
答案 1 :(得分:0)
您可以在页面的page指令中设置AspCompat =“true”,它将在STA中运行。完成后,您的第一个示例应该正常工作
答案 2 :(得分:0)
WinInet is not supported for use in services,这意味着任何使用WinInet的应用程序,例如IE的webbrowser控件,都不支持服务(例如asp.net服务)。
答案 3 :(得分:0)
为什么在基于asp.net的应用程序中使用webbrowser控件?
看起来你想在浏览器中安装一个浏览器。
使用它,你限制观众使用IE(和我想的Windows)。
你不能使用IFrame或Ajax或其他替代方案吗?
发布你的理由&人们可能会提出更好的选择。
答案 4 :(得分:0)
我还试图在我的.Net页面中使用WebBrowser控件。找到这篇文章准确回答了你的问题。
Capture Screenshot (Snapshot) Image of Website (Web Page) in ASP.Net using C# and VB.Net