c# 中 控件WebBrowser 跨线程问题,求解决
在我的程序中,用一个类B来动态生成控件WebBrowser到主窗体类FORM1中。在FORM1中,会有循环,利用System.Timers.Timer,经过一段时间后,再...
在我的程序中,用一个类B来动态生成控件WebBrowser到主窗体类FORM1中。在FORM1中,会有循环,利用System.Timers.Timer,经过一段时间后,再次 实例化类B,再次生成 WebBrowser。循环的第一次没问题,但第二次循环时,就出现问题“当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。”请问如何解决呢?求详细代码解决
展开
1个回答
展开全部
//System.Timers.Timer timer 的定时回调函数
void timer_Elapsed(object sender, ElapedEventArgs e)
{
//这个回调函数是运行在另一个线程上,对窗体上控件操作需要跨线程调用
this.Invoke((MethodInvoker)delegate
{
WebBrowser web = new WebBrowser();
web.Location = new Point(0, 0);
web.Dock = DockStyle.Fill;
this.Controls.Add(web);
});
}
追问
大神,我是想要每实例化一次类B,就生成一个WebBrowser控件(如果像你写的,我会每一次刷新就生成一个web控件),所以WebBrowser web = new WebBrowser(); 这句是想要在
this.Invoke((MethodInvoker)delegate {。。。。。} 之前,那我应该如何做呢?
追答
public class B
{
public B(Form form)
{
this.form = form;
}
Form form;
public void CreateWebBrowser()
{
form.Invoke((MethodInvoker)delegate
{
WebBrowser web = new WebBrowser();
web.Location = new Point(0, 0);
web.Dock = DockStyle.Fill;
form.Controls.Add(web);
});
}
}
}
在窗口Form1.cs中
void t_Elapsed(object sender, ElapsedEventArgs e)
{
B b = new B(this);
b.CreateWebBrowser();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询