我现在有个界面上面控件比较多,远程打开窗体有点慢,所以想加一个等待的对话框
我想用的是ThreadPool+Invoke,下面是一个用线程打开窗体的方法  private void DoWork(Form fromname)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object o)
            {
                fromname.Show();
            }));
        }但是现在我想要的效果是点击一个按钮,就打开一个等待的窗体,然后后台线程通过我传进去的窗体名称打开对应的窗体,窗体控件全部加载完毕后关闭线程同时将这个等待窗体关掉,望高手赐教,谢谢

解决方案 »

  1.   

    直接Application.Run(new CWaitDialog());
      

  2.   

     private void DoWork(Form fromname)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object o)
                {
                    Application.Run(new FormName());
                }));
            }
      

  3.   

    可以,在新线程中创建窗口即可。但一般不采取这种编程模式,我猜想你的用意,可以在你的另外窗口启动新线程来达到。 
    请体会我写的测试代码: 
    public partial class Form1 : Form 
        { 
            private bool mNotMainThread = false; 
            public Form1() 
            { 
                InitializeComponent(); 
            }         public Form1(bool NotMainThread) 
            { 
                InitializeComponent(); 
                mNotMainThread = NotMainThread; 
            }         private void button1_Click(object sender, EventArgs e) 
            { 
                Thread t = new Thread(ThreadFun); 
                t.Start(); 
            }         public void ThreadFun() 
            { 
                Form1 frm = new Form1(true); 
                frm.ShowDialog(); 
            }         private void Form1_Load(object sender, EventArgs e) 
            { 
                if (mNotMainThread) 
                    Thread.Sleep(5000); 
            } 
        }
      

  4.   

    楼主这个问题很经典,最好的处理方式应该是使用BackgroudWorker组件,这应该也是微软设计该组件的本意,下面是我的一个类似程序的demo图片,
    使用BackgroundWorker组件进行异步操作编程
    写了一篇文章对的魔进行讲解并分析了一下BackgroudWorker组件的实现,楼主细心看了后应该不会再有疑问,
    http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx如果楼主需要同时运行多个这样的任务,可以参考另外一篇
    实现增强的异步任务执行组件
    http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx