C# 在asp.net页面错误的代码隐藏上调用webbrowser控件?
如何在asp.net页面的代码隐藏中使用webbrowser控件。我得到这个错误: 无法实例化ActiveX控件,因为当前线程不在单线程单元中 谢谢你的帮助C# 在asp.net页面错误的代码隐藏上调用webbrowser控件?,c#,asp.net,.net,vb.net,C#,Asp.net,.net,Vb.net,如何在asp.net页面的代码隐藏中使用webbrowser控件。我得到这个错误: 无法实例化ActiveX控件,因为当前线程不在单线程单元中 谢谢你的帮助 Imports System.Windows.Forms Imports System.Drawing Imports System.Drawing.Imaging Imports System.Web.UI.WebControls Partial Class _Default Dim testcontrol As New We
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Web.UI.WebControls
Partial Class _Default
Dim testcontrol As New WebBrowser() ' it breaks here
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
testcontrol.Navigate("mysite")
End Sub
End Class
为什么要在ASP.NET应用程序的后台使用WebBrowser?如果您需要与另一台服务器上的网页进行交互,通常人们会使用
HttpWebRequest
如果我错了,有人可以纠正我,但我相信一个web应用程序,几乎从定义上来说,不可能是单线程的。Web应用程序是多用户的,可以同时做多件事和容纳多个用户 为什么要在ASP.NET应用程序的后台使用WebBrowser?如果您需要与另一台服务器上的网页进行交互,通常人们会使用
HttpWebRequest
如果我错了,有人可以纠正我,但我相信一个web应用程序,几乎从定义上来说,不可能是单线程的。Web应用程序是多用户的,可以同时做多件事和容纳多个用户 这是有效的:
/// <summary>
/// Returns a thumbnail for the current member values
/// </summary>
/// <returns>Thumbnail bitmap</returns>
protected Bitmap GetThumbnail()
{
try
{
// WebBrowser is an ActiveX control that must be run in a single-threaded
// apartment so create a thread to create the control and generate the
// thumbnail
Thread thread = new Thread(new ThreadStart(GetThumbnailWorker));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return _bmp;
}
catch (Exception ex)
{
using (StreamWriter writer = new StreamWriter("log.txt", true))
{
writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString()));
writer.Flush();
writer.Close();
}
return null;
}
}
/// <summary>
/// Creates a WebBrowser control to generate the thumbnail image
/// Must be called from a single-threaded apartment
/// </summary>
protected void GetThumbnailWorker()
{
try
{
using (WebBrowser browser = new WebBrowser())
{
browser.ClientSize = new Size(_width, _height);
//browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
browser.Navigate(_url);
// Wait for control to load page
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
// Render browser content to bitmap
_bmp = new Bitmap(_thumbWidth, _thumbHeight);
browser.DrawToBitmap(_bmp, new Rectangle(0, 0, _thumbWidth, _thumbHeight));
}
}
catch (Exception ex)
{
using (StreamWriter writer = new StreamWriter("log.txt", true))
{
writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString()));
writer.Flush();
writer.Close();
}
}
}
//
///返回当前成员值的缩略图
///
///缩略位图
受保护的位图缩略图()
{
尝试
{
//WebBrowser是一个ActiveX控件,必须在单线程中运行
//所以创建一个线程来创建控件并生成
//缩略图
线程线程=新线程(新线程开始(GetThumbnailWorker));
SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
返回_bmp;
}
捕获(例外情况除外)
{
使用(StreamWriter=newstreamwriter(“log.txt”,true))
{
WriteLine(string.Format(“[{0}]{1}”,DateTime.Now.ToString(),ex.ToString());
writer.Flush();
writer.Close();
}
返回null;
}
}
///
///创建WebBrowser控件以生成缩略图图像
///必须从单线程单元调用
///
受保护的void GetThumbnailWorker()
{
尝试
{
使用(WebBrowser浏览器=新WebBrowser())
{
browser.ClientSize=新尺寸(\u宽度,\u高度);
//browser.ScrollBarsEnabled=false;
browser.ScriptErrorsSuppressed=true;
browser.Navigate(_url);
//等待控件加载页面
while(browser.ReadyState!=WebBrowserReadyState.Complete)
Application.DoEvents();
//将浏览器内容渲染为位图
_bmp=新位图(_拇指宽度,_拇指高度);
DrawToBitmap(_bmp,新矩形(0,0,_thumbWidth,_thumbHeight));
}
}
捕获(例外情况除外)
{
使用(StreamWriter=newstreamwriter(“log.txt”,true))
{
WriteLine(string.Format(“[{0}]{1}”,DateTime.Now.ToString(),ex.ToString());
writer.Flush();
writer.Close();
}
}
}
这正在工作:
/// <summary>
/// Returns a thumbnail for the current member values
/// </summary>
/// <returns>Thumbnail bitmap</returns>
protected Bitmap GetThumbnail()
{
try
{
// WebBrowser is an ActiveX control that must be run in a single-threaded
// apartment so create a thread to create the control and generate the
// thumbnail
Thread thread = new Thread(new ThreadStart(GetThumbnailWorker));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
return _bmp;
}
catch (Exception ex)
{
using (StreamWriter writer = new StreamWriter("log.txt", true))
{
writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString()));
writer.Flush();
writer.Close();
}
return null;
}
}
/// <summary>
/// Creates a WebBrowser control to generate the thumbnail image
/// Must be called from a single-threaded apartment
/// </summary>
protected void GetThumbnailWorker()
{
try
{
using (WebBrowser browser = new WebBrowser())
{
browser.ClientSize = new Size(_width, _height);
//browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
browser.Navigate(_url);
// Wait for control to load page
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
// Render browser content to bitmap
_bmp = new Bitmap(_thumbWidth, _thumbHeight);
browser.DrawToBitmap(_bmp, new Rectangle(0, 0, _thumbWidth, _thumbHeight));
}
}
catch (Exception ex)
{
using (StreamWriter writer = new StreamWriter("log.txt", true))
{
writer.WriteLine(string.Format("[{0}] {1}", DateTime.Now.ToString(), ex.ToString()));
writer.Flush();
writer.Close();
}
}
}
//
///返回当前成员值的缩略图
///
///缩略位图
受保护的位图缩略图()
{
尝试
{
//WebBrowser是一个ActiveX控件,必须在单线程中运行
//所以创建一个线程来创建控件并生成
//缩略图
线程线程=新线程(新线程开始(GetThumbnailWorker));
SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
返回_bmp;
}
捕获(例外情况除外)
{
使用(StreamWriter=newstreamwriter(“log.txt”,true))
{
WriteLine(string.Format(“[{0}]{1}”,DateTime.Now.ToString(),ex.ToString());
writer.Flush();
writer.Close();
}
返回null;
}
}
///
///创建WebBrowser控件以生成缩略图图像
///必须从单线程单元调用
///
受保护的void GetThumbnailWorker()
{
尝试
{
使用(WebBrowser浏览器=新WebBrowser())
{
browser.ClientSize=新尺寸(\u宽度,\u高度);
//browser.ScrollBarsEnabled=false;
browser.ScriptErrorsSuppressed=true;
browser.Navigate(_url);
//等待控件加载页面
while(browser.ReadyState!=WebBrowserReadyState.Complete)
Application.DoEvents();
//将浏览器内容渲染为位图
_bmp=新位图(_拇指宽度,_拇指高度);
DrawToBitmap(_bmp,新矩形(0,0,_thumbWidth,_thumbHeight));
}
}
捕获(例外情况除外)
{
使用(StreamWriter=newstreamwriter(“log.txt”,true))
{
WriteLine(string.Format(“[{0}]{1}”,DateTime.Now.ToString(),ex.ToString());
writer.Flush();
writer.Close();
}
}
}
为什么页面加载不是公共的?主站点是另一个文件,对于catc也是如此