需要解决一下两个问题之一:
1,两个窗体相互切换,先调用Hide()方法,再调用Show()方法,会出现切换时停顿的问题,如何解决?注:只能先Hide()后Show(),不能调过来;
2,两个窗体共用一个串口,窗体间切换时如果先Show()后Hide()的话,会出现串口冲突的问题,如何在Show后一个窗体前关闭前一个窗口的串口?注:关闭和打开串口放在VisibleChanged()事件里面。大家要是能解决第一个问题就最好,也最直接明了,谢谢!

解决方案 »

  1.   

    停顿应当是窗口load时,任务太多。想想别的方法,把load时的任务减少,如用个time当load后再执行窗口内容。或多线程解决。最好是多线程。
      

  2.   

    2.在Program.cs中定public串口,然后再个窗体中调用
      

  3.   

    第二个方案我自己经过半天的努力终于解决了,但我很想解决第一个,希望大家努力!
    补充:不是load的问题,大家可以建两个空白的窗体Form1,Form2;
         Form1的Click事件:form2 f2=new form2();
                             f2.show();this.hide();
          form2的Click事件:form1 f1=new form1();
                              this.hide();f1.show();
    结果还是会出现第一个问题。最后,我不是想知道为什么出现这个问题,我是想知道如何解决这个问题。希望兄弟姐妹们帮帮忙,谢谢!
      

  4.   

    不清楚你在什么环境下使用会出现你说的情况。
    我的测试没有出现停顿。但窗体之间切换不应每次都new,而之前的隐藏。
    那样资源消耗越来越大。
    Form2 f2;
    private void button1_Click(object sender, EventArgs e)
    {
    if (f2 == null || f2.IsDisposed)
    {
    f2 = new Form2();
    f2.Frm1 = this;
    }
    f2.Show();
    this.Hide();
                    }//Form2中
    Form1 f1 ;
    public Form1 Frm1
    {
    set { f1 = value; }
    }
    private void button1_Click(object sender, EventArgs e)
    {
    this.Hide();
    f1.Show();
                    }
      

  5.   

    我的方法类似楼上的:
    Form1.cs里
    字段 Form frm2;
    form1_load里
    实例化frm2=new Form2();form1_click里
    form2.show();this.hide();----------------------------------
    Form2.cs里:
    字段 Form _parent;
    构造方法里把form1引用传进来:
            public Form2(Form myparent)
            {
                _parent = myparent;
            }form2_click()
    {
    _parent.Show(); 
    this.Hide();
    }
      

  6.   

    将Show()换成ShowDialog(),然后close一下要关闭的窗体。
                  
                  this.Hide();
                f1.ShowDialog();
                this.Close();
      

  7.   

    方向错了,楼主。form1中。new form2,然后hide掉自己,form2中又创建form1,只能不停的创建新窗体,每次都不是之前隐藏的那个。每次new都会调用load等方法。如果界面控件多。自然会闪烁看到停顿。你可以在program类中定义2个静态变量:
    然后调用静态变量的show,hide
      

  8.   

    form2 f2=new form2();
      f2.show();this.hide();
      form2的Click事件:form1 f1=new form1();
      this.hide();f1.show();楼主应该固定form1和form2,你这样new下去
    系统资源马上就被你用光了
    不出问题才怪呢
      

  9.   

    我再次跟大家说明下,我要解决的问题不是New的问题,这个问题我也懂,我不懂的是,如何解决两个form切换:先hide后show和先show后hide两种方法出现的问题:先hide后show的话肯定可以用肉眼看得见是一个窗体隐藏后再显示另一个窗体的。但我不知道怎么做才能消除这个问题。
      

  10.   

    ChildForm childForm = new ChildForm();
    一:
    childForm.Show();
    childForm.Hide();
    二:
    childForm.Hide();
    childForm.Show();都会出现窗体闪烁,是因为窗体Show了之后,要进行窗体重绘,肯定会有闪烁,取决你的机器的性能,不然你拿个最低可以运行VS的配置试试,你即使只有childForm.Show();也可以出现闪烁,这是VS的问题,窗体重绘必然会有闪烁。
      

  11.   

    闪烁是因为人眼捕捉到渲染的尾部,用双倍缓冲解决,原来是先存到一个看不见的控件里,等绘制完毕再显示出来。
    双倍缓冲:设置窗体的行为属性DoubleBufferd=true