这里想动态加载窗口时有个过渡窗口,因为显示窗口内容较多,加载比较慢,为了更好的用户体验加载时有个过渡窗口显示,但是过渡窗口不显示,不知道什么原因,代码如下
private void button1_Click(object sender, EventArgs e)
        {
            this.panel1.Controls.Clear();
            Form2 f2 = new Form2();
            f2.Dock = DockStyle.Fill;
            f2.TopLevel = false;
            this.panel1.Controls.Add(f2);
            f2.Show();            Form3 f3 = new Form3();
            f3.setform();
            f3.TopLevel = false;
            f3.Dock = DockStyle.Fill;
            this.panel1.Controls.Add(f3);
            f3.Show();            this.panel1.Controls.RemoveAt(0);        }
Form2为过渡窗口,Form3为最终显示窗口,点击按钮之后等待一会直接显示Form3,Form2始终不显示

解决方案 »

  1.   

    程序做如下修改
    private void button1_Click(object sender, EventArgs e)
            {
                this.panel1.Controls.Clear();            Form2 f2 = new Form2();
                f2.Dock = DockStyle.Fill;
                f2.TopLevel = false;
                this.panel1.Controls.Add(f2);
                f2.Show();            Thread mythread = new Thread(new ThreadStart(Threadaddfrom3));
                mythread.IsBackground = true;
                mythread.Start();            
            }        private void Threadaddfrom3()
            {
                try
                {
                    MethodInvoker mi = new MethodInvoker(this.addfrom3);
                    this.BeginInvoke(mi);
                }
                catch (System.Exception ex)
                {
                    
                }
            }        private void addfrom3()
            {
                Form3 f3 = new Form3();
                f3.setform();
                f3.TopLevel = false;
                f3.Dock = DockStyle.Fill;
                this.panel1.Controls.Add(f3);
                f3.Show();            this.panel1.Controls.RemoveAt(0);
            }
    Form2有时显示,有时不显示,不知道是什么原因
      

  2.   

    这个你需要用到多线程,顺序执行的话,在FORM2中驻留的时间会非常的短
      

  3.   

    这个Form2不是在Form3显示完成之后才移除的吗?多线程怎么解决呢?可以给个思路吗
      

  4.   

    修改如下,增加Thread.Sleep(1)就没有问题了,(不知道解决没有解决,因为显示和不显示是不一定的,但增加之后测试总是显示)不是很理解,很疑惑啊
    private void Threadaddfrom3()
       {
       Thread.Sleep(1);
       try
       {
       MethodInvoker mi = new MethodInvoker(this.addfrom3);
       this.BeginInvoke(mi);
       }
       catch (System.Exception ex)
       {
         
      }
       }
      

  5.   

    那是因为form3挡住了form2,form2.BringToFront把窗体放在最前面
      

  6.   


    这个是Form2有时显示,有时不显示,不是完全不显示,form2.BringToFront之后情况是相同的(已经试过)
      

  7.   

    现在用增加Thread.Sleep()时间,暂时解决这个问题,结贴