子线程中show了一个窗体,如何在主线程控制它?

解决方案 »

  1.   

    把这个窗体放在主线程里show吧,然后在子线程里通过委托来控制它。
      

  2.   

    但现在确实是在子线程中show出来的
      

  3.   

    开个线程show也是一样么。窗口是另一个线程
    要操作,那就得public么,还能有什么办法,再委托不可能再Form1中去委托Form2的吧,除非把它的元素都public吧。关闭它的话,给个public的函数操作关闭么。除了子线程委托到STAThread中的元素,其他的都public搞定~
      

  4.   

    我个人认为还是楼主最好在主线程里Show窗体,然后通过委托控制。
    改动大,主要还是因为设计的不合理。
      

  5.   

    我测试了可以的.
    使用新开的窗口实例的Invoke方法
      

  6.   

    这是主线程的,子线程t新开窗口fm        Form2 fm;
            private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(new ThreadStart(show));
                t.Start();
            }
            void show()
            {
                fm = new Form2();
                Application.Run(fm);
            }主线程操作子线程的控件       private void button2_Click(object sender, EventArgs e)
            {
                fm.Invoke(new Action(() =>
                    {
                        fm.textBox1.Text = "2323";
                    }));
            }
      

  7.   

    你能拿的到子线程中窗体的句柄吗?拿的到就可以通过委托,或者Post消息来做啊。