我建了两个窗体: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控件

解决方案 »

  1.   

    td.SetApartmentState(ApartmentState.STA);
      

  2.   

    //td.SetApartmentState(ApartmentState.MTA);注释了
      

  3.   

    td.SetApartmentState(ApartmentState.STA);
    这个属性也不行!
      

  4.   

    你为什么要在子线程里开启子线程来显示Form2 呢?
      

  5.   

    fm2.ShowDialog();
    =》
    this.Invoke(new Action(() => fm2.ShowDialog()));试下
      

  6.   

    不行 执行到这个地方的时候都报错了
     private void InitializeComponent()
            {
                this.webBrowser1 = new System.Windows.Forms.WebBrowser();也就是执行Form2的构造方法的时候都报那个“当前线程不在单线程单元中”错误了
      

  7.   

    Form2 fm2 = new Form2();在主线程里写,ShowDialog 放在子线程里
      

  8.   

    但是我不确定什么时候调用fm2了!而且我可能用到多个form2
    谢谢你了
    刚才把您提供的方法改了下  已经可以
    不知道对不!您看下!
    this.Invoke(new Action(() =>
                {
                    Form2 fm2 = new Form2();
                    fm2.ShowDialog();
                }));
    我这样改可以吗?