ThreadStart ts = new ThreadStart(ShowForm);
            Thread td = new Thread(ts);
            td.IsBackground = true;
            td.Start();       private void ShowForm()
        {
            Form frm = new Form ();
            frm.Show();
        }
请教高手

解决方案 »

  1.   

    因为ShowForm方法返回后,线程就结束了,线程结束了,它打开的任何窗体都会被关闭,所以有界面的线程都需要一个消息循环,
      

  2.   

    ShowForm 方法修改一下
    private void ShowForm()
    {
        Form frm = new Form();
        this.Invoke((MethodInvoker)(() => frm.Show()));
    }让窗体通过主线程来打开
      

  3.   

     this.Invoke((MethodInvoker)(() => frm.Show()));
    这个没看懂,嘛意思
      

  4.   

    楼主可以试试这样:  private void ShowForm()
       {
       Form frm = new Form ();
       Application.Run(frm);
       }
      

  5.   

    这个是匿名委托,MethodInvoker)(() => frm.Show())定义了一个方法,()表示没有参数,frm.Show()是方法的内容,lambada表达式,
      

  6.   


    靠,这方法好啊!!! 虽然使用 MethodInvoker,再加个委托,可以把form 显示出来但是 主 form会出现 不响应鼠标事件,死那里;直到form中的load代码跑完,主form才响应!
      

  7.   

    Load 在 Show 后才触发,里面如果有复杂的操作,可以放到构造函数中去执行
      

  8.   

     frm.Show();改为 frm.ShowDialog();
      

  9.   

    using System.Threading.Tasks;
    Task.Factory.StartNew(() => { Form2 f = new Form2(); this.Invoke((MethodInvoker)(() => f.Show())); });
      

  10.   

    using System.Threading.Tasks;
    Task.Factory.StartNew(() => { Form2 f = new Form2(); this.Invoke((MethodInvoker)(() => f.Show())); });
      

  11.   

    using System.Threading.Tasks;
    Task.Factory.StartNew(() => { Form2 f = new Form2(); this.Invoke((MethodInvoker)(() => f.Show())); });