现在有A,B,C,D,E五个窗体,A窗体为父窗体,A中含有两个timer1和timer2个,timer1来控制b,c,d,e的循环,timer2用来时间倒计时,在b,c,d循环到一定次数,e窗体出现,想让e窗体停留的时间延长一些,我将thread.sleep()写在在e的代码中,页面是不东了,但倒计时已经在背后开始了,要是写在a中,没有效果!我该怎么写!请指教?

解决方案 »

  1.   

    我给你提取一下你的需求:
    form1中有一个timer1
    timer1中有new form2.Show();
    form2中有time2倒计时。
    timer2中有this.Close();
    现在你想延长temer2的interval
    对吧???
      

  2.   

    不,我在A中利用timer1的timer1_Tick使b,c,d,e循环当循环到e的时候 我想延长e的时间,timer2也是在A中,他的作用是进行倒计时的!
      

  3.   

    BackgroundWorker组件介绍(属性、方法、事件)
    http://blog.csdn.net/yunhaiC/archive/2009/07/08/4331943.aspx
    用一下这个试试看还有你的问题可以让看延时通断电路,呵呵!
      

  4.   


    timer1来控制b,c,d,e的循环?你的意思是依次轮流让对应的窗体显示指定的时间?你是怎么确定不同窗体具体的显示时间的?你如何显示那四个窗体?另外timer控件本身基于线程,这个地方再用sleep不好吧?
      

  5.   

    b,c,d,e的显示时间是相同的!
    我将A作为父窗体,其余的窗体为其子窗体,        private void timer1_Tick(object sender, EventArgs e)
            {
                foreach (Form f in this.MdiChildren)
                {
                    if (f.Name == "B")
                    {
                        try
                        {
                            this.ActiveMdiChild.Close();
                        }
                        catch { }
                        if (jishu == (returnjiange()-1))
                        {
                            E w = new E();
                            w.MdiParent = this;
                            w.Show();
                        }
                        else
                        {
                            C w = new C();
                            w.MdiParent = this;
                            w.Show();
                        }
                        jishu++;
                    }
                    else if (f.Name == "C")
                    {
                        try
                        {
                            this.ActiveMdiChild.Close();
                        }
                        catch { }
                        if (jishu == (returnjiange()-1))
                        {
                            E w = new E();
                            w.MdiParent = this;
                            w.Show();
                        }
                        else
                        {
                            D w = new D();
                            w.MdiParent = this;                        w.Show();
                        }
                        jishu++;
                     }
                    else if (f.Name == "D")
    如此继续下去,在A的pageload中直接打开B,并设置timer1开始
      

  6.   

    你把控制E窗体显示时间长度的变量设得比B、C、D长一点不就行了吗?
      

  7.   

    你说time2是倒计时的,是不是用它来控制各窗体的显示时间?如果是的话你把它的代码贴出来看一下吧?
    另外你说要循环到一定次次数后才显示E,这个次数是不是10楼的代码中jishu?returnjiange()是干什么的?
    我还想知道代码中的if(f.name="E")时的代码!
      

  8.   

    timer2只是一个倒计时的 他A中显示倒计时,其余的都是a的子窗体,
    循环到一定次次数后才显示E就是jishu达到一定次数,returnjiange()是用来判断jishu是否达到次数,
    if(f.name="E")时的代码!中代码基本同上
    给你贴出来
    else if (f.Name == "E")
                    {
                        try
                        {
                            this.ActiveMdiChild.Close();
                        }
                        catch { }
                        B w = new B();
                        w.MdiParent = this;
                        w.Show();
                        
                                          sdr = add.GetSet("where Bz='间隔时间'");
                        uint jgTime = 0;
                        if (sdr.Read())
                        {
                            jgTime = Convert.ToUInt32(sdr["DjMoney"].ToString());
                        }
                        sdr.Close();
                        sdr = null;
                        
                        this.timer2.Interval = 1000;//倒计时使用
                        Remainder = jgTime * 60;//倒计时使用
                        this.timer2.Enabled = true;//倒计时使用
                    }