C# 多线程WebBrowser问题!(急)

z812183667 2011-12-20 04:14:24
我建了两个窗体:Form1窗体 Form2窗体
B窗体上面有一个WebBrowser控件

然后我在Form1窗体上面放了一个Button
Button的单击事件里面开启了一个线程
这个线程执行方法是:弹出Form2窗体 结果报错
当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”

代码如下
private void button5_Click(object sender, EventArgs e)
{
Thread td = new Thread(new ThreadStart(TheadShowMsg));
td.SetApartmentState(ApartmentState.MTA);
td.Start();
}
void TheadShowMsg()
{
Thread thd = new Thread(new ThreadStart(SHowFOrm));
thd.Start();
}
void SHowFOrm()
{
Form2 fm2 = new Form2();
fm2.ShowDialog();
}
Form2中窗体中有一个WebBrowser控件
...全文
250 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
z812183667 2011-12-20
  • 打赏
  • 举报
回复
谢谢了!结贴
阿非 2011-12-20
  • 打赏
  • 举报
回复
z812183667 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sandy945 的回复:]
Form2 fm2 = new Form2();

在主线程里写,ShowDialog 放在子线程里
[/Quote]
但是我不确定什么时候调用fm2了!而且我可能用到多个form2
谢谢你了
刚才把您提供的方法改了下 已经可以
不知道对不!您看下!
this.Invoke(new Action(() =>
{
Form2 fm2 = new Form2();
fm2.ShowDialog();
}));
我这样改可以吗?
阿非 2011-12-20
  • 打赏
  • 举报
回复
Form2 fm2 = new Form2();

在主线程里写,ShowDialog 放在子线程里
z812183667 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]
fm2.ShowDialog();
=》
this.Invoke(new Action(() => fm2.ShowDialog()));

试下
[/Quote]
不行 执行到这个地方的时候都报错了
private void InitializeComponent()
{
this.webBrowser1 = new System.Windows.Forms.WebBrowser();



也就是执行Form2的构造方法的时候都报那个“当前线程不在单线程单元中”错误了
阿非 2011-12-20
  • 打赏
  • 举报
回复
fm2.ShowDialog();
=》
this.Invoke(new Action(() => fm2.ShowDialog()));

试下
z812183667 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sandy945 的回复:]
你为什么要在子线程里开启子线程来显示Form2 呢?
[/Quote]
因为有些地方需要!我做即时聊天
接收消息是在另外一个线程中!
阿非 2011-12-20
  • 打赏
  • 举报
回复
你为什么要在子线程里开启子线程来显示Form2 呢?
z812183667 2011-12-20
  • 打赏
  • 举报
回复
td.SetApartmentState(ApartmentState.STA);
这个属性也不行!
z812183667 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fangxinggood 的回复:]
td.SetApartmentState(ApartmentState.STA);
[/Quote]
这个加上没有用 所以我就注释了!
阿非 2011-12-20
  • 打赏
  • 举报
回复
//td.SetApartmentState(ApartmentState.MTA);

注释了

机器人 2011-12-20
  • 打赏
  • 举报
回复
td.SetApartmentState(ApartmentState.STA);

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧