winfrom的thread.sleep()的问题

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

20 个解决方案

#1


自己顶!

#2


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

#3


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

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

#4


BackgroundWorker组件介绍(属性、方法、事件)
http://blog.csdn.net/yunhaiC/archive/2009/07/08/4331943.aspx
用一下这个试试看

还有你的问题可以让看延时通断电路,呵呵!

#5


引用 4 楼 yunhaic 的回复:
BackgroundWorker组件介绍(属性、方法、事件)
http://blog.csdn.net/yunhaiC/archive/2009/07/08/4331943.aspx
用一下这个试试看

还有你的问题可以让看延时通断电路,呵呵!

延时通断电路?我没听说过,麻烦说详细点!谢谢!

#6


在循环的e的时候你可以将倒计时设的长一点,比如其他的是5秒的话,e的可以设成10秒?没听明白你的意思,不知是不是符合你的意思!

#7


是我说都的不够明确么?进来的请指教?

#8


引用 6 楼 jbo126 的回复:
在循环的e的时候你可以将倒计时设的长一点,比如其他的是5秒的话,e的可以设成10秒?没听明白你的意思,不知是不是符合你的意思!

我哪没说明白?

#9


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


timer1来控制b,c,d,e的循环?你的意思是依次轮流让对应的窗体显示指定的时间?

你是怎么确定不同窗体具体的显示时间的?

你如何显示那四个窗体?

另外timer控件本身基于线程,这个地方再用sleep不好吧?

#10


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开始

#11


自己顶

#12


上面的代码是循环的  带循环到E的时候我想让E窗体在多停留会,我该怎么做?

#13


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

#14


该回复于2013-08-24 18:59:44被版主删除

#15


引用 13 楼 jbo126 的回复:
你把控制E窗体显示时间长度的变量设得比B、C、D长一点不就行了吗?

不行!要是可以改变那个时间长度 我也就不这么复杂了
我都以为这帖子沉了!结果有起来了

#16


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

#17


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;//倒计时使用
                }

#18


看来没人累我啊!

#19


帮顶一下

#20


伤心结贴!

#1


自己顶!

#2


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

#3


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

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

#4


BackgroundWorker组件介绍(属性、方法、事件)
http://blog.csdn.net/yunhaiC/archive/2009/07/08/4331943.aspx
用一下这个试试看

还有你的问题可以让看延时通断电路,呵呵!

#5


引用 4 楼 yunhaic 的回复:
BackgroundWorker组件介绍(属性、方法、事件)
http://blog.csdn.net/yunhaiC/archive/2009/07/08/4331943.aspx
用一下这个试试看

还有你的问题可以让看延时通断电路,呵呵!

延时通断电路?我没听说过,麻烦说详细点!谢谢!

#6


在循环的e的时候你可以将倒计时设的长一点,比如其他的是5秒的话,e的可以设成10秒?没听明白你的意思,不知是不是符合你的意思!

#7


是我说都的不够明确么?进来的请指教?

#8


引用 6 楼 jbo126 的回复:
在循环的e的时候你可以将倒计时设的长一点,比如其他的是5秒的话,e的可以设成10秒?没听明白你的意思,不知是不是符合你的意思!

我哪没说明白?

#9


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


timer1来控制b,c,d,e的循环?你的意思是依次轮流让对应的窗体显示指定的时间?

你是怎么确定不同窗体具体的显示时间的?

你如何显示那四个窗体?

另外timer控件本身基于线程,这个地方再用sleep不好吧?

#10


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开始

#11


自己顶

#12


上面的代码是循环的  带循环到E的时候我想让E窗体在多停留会,我该怎么做?

#13


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

#14


该回复于2013-08-24 18:59:44被版主删除

#15


引用 13 楼 jbo126 的回复:
你把控制E窗体显示时间长度的变量设得比B、C、D长一点不就行了吗?

不行!要是可以改变那个时间长度 我也就不这么复杂了
我都以为这帖子沉了!结果有起来了

#16


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

#17


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;//倒计时使用
                }

#18


看来没人累我啊!

#19


帮顶一下

#20


伤心结贴!

#21