C#用timer控件做循环周期的问题
time1_tick里已经有写好的程序了,已经用来做每隔5s循环(循环4次,然后停止,这算一个周期)的程序了我现在想用textbox1,textbox21控制输入的循环周...
time1_tick里已经有写好的程序了,
已经用来做每隔5s循环(循环4次,然后停止,这算一个周期)的程序了
我现在想用textbox1,textbox2
1控制输入的循环周期次数looptime
2控制每次一个周期结束后的延时时间delaytime
(相当于执行完一个周期后延时一会再做一个周期)
当然用thread.sleep做延时最简单,但是不知到会不会和我的另一个线程冲突
就是这样,然后textbox输入部分已经搞定了,
现在可以用looptime=5 delaytime=1000来进行测试
现在就是这个问题了~
现在我写好的程序是这样的:
private void button4_Click(object sender, EventArgs e)
{
if (timer1.Enabled==false)
{
timer1.Interval = 5000;
timer1.Start();
timer1_Tick(null, null);
}
}
//////////////////下面有我的程序代码,已经设置每隔interval=5s,然后循环四次
public PictureBox CurrentPic { get; set; }
private void timer1_Tick(object sender, EventArgs e)
{
if (CurrentPic == null)
{
CurrentPic = pictureBox3 ;
}
CurrentPic.Image = bm;
if (CurrentPic == pictureBox3)
{
pictureBox3.Image.Save(path1 + "\\" + timepath + "\\1.bmp");
CurrentPic = pictureBox4;
}
。。。。。
else
{
pictureBox6.Image.Save(path1 + "\\" + timepath + "\\4.bmp");
timer2.Stop();
CurrentPic = null;
}
}
} 展开
已经用来做每隔5s循环(循环4次,然后停止,这算一个周期)的程序了
我现在想用textbox1,textbox2
1控制输入的循环周期次数looptime
2控制每次一个周期结束后的延时时间delaytime
(相当于执行完一个周期后延时一会再做一个周期)
当然用thread.sleep做延时最简单,但是不知到会不会和我的另一个线程冲突
就是这样,然后textbox输入部分已经搞定了,
现在可以用looptime=5 delaytime=1000来进行测试
现在就是这个问题了~
现在我写好的程序是这样的:
private void button4_Click(object sender, EventArgs e)
{
if (timer1.Enabled==false)
{
timer1.Interval = 5000;
timer1.Start();
timer1_Tick(null, null);
}
}
//////////////////下面有我的程序代码,已经设置每隔interval=5s,然后循环四次
public PictureBox CurrentPic { get; set; }
private void timer1_Tick(object sender, EventArgs e)
{
if (CurrentPic == null)
{
CurrentPic = pictureBox3 ;
}
CurrentPic.Image = bm;
if (CurrentPic == pictureBox3)
{
pictureBox3.Image.Save(path1 + "\\" + timepath + "\\1.bmp");
CurrentPic = pictureBox4;
}
。。。。。
else
{
pictureBox6.Image.Save(path1 + "\\" + timepath + "\\4.bmp");
timer2.Stop();
CurrentPic = null;
}
}
} 展开
1个回答
展开全部
你可以用数字来处理,如果不想用线程,可以用两个timer控件,或者一个timer控件,但是timer控件只用来计时, begin在按钮中运行 work在timer1_Tick中执行
比如这样
int looptime ;
int delaytime ;
int i_loop;
int i_delay;
bool waiting;
PictureBox[] CurrentPic;
private void begin()
{
looptime =5;
delaytime =1000/5;//因为时间控件的周期是每五秒工作一次
i_loop=0;
i_delay=0;
waiting=false;
CurrentPic =new PictureBox[]{pictureBox3,pictureBox4,pictureBox5,pictureBox6};
timer1.Interval = looptime*1000;
timer1.Start();
}
public void work()
{
if(waiting)
{
i_delay++;
if(i_delay> delaytime )
{
i_delay=0;
waiting=false;
}
}else{
savePic(i_loop);
i_loop++;
if(i_loop>CurrentPic.Count-1)
{
i_loop=0;
waiting=true;
}
}
}
public void savePic(int i)
{
CurrentPic[i].Image.Save(path1 + "\\" + timepath + "\\"+i.toString()+".bmp");
}
比如这样
int looptime ;
int delaytime ;
int i_loop;
int i_delay;
bool waiting;
PictureBox[] CurrentPic;
private void begin()
{
looptime =5;
delaytime =1000/5;//因为时间控件的周期是每五秒工作一次
i_loop=0;
i_delay=0;
waiting=false;
CurrentPic =new PictureBox[]{pictureBox3,pictureBox4,pictureBox5,pictureBox6};
timer1.Interval = looptime*1000;
timer1.Start();
}
public void work()
{
if(waiting)
{
i_delay++;
if(i_delay> delaytime )
{
i_delay=0;
waiting=false;
}
}else{
savePic(i_loop);
i_loop++;
if(i_loop>CurrentPic.Count-1)
{
i_loop=0;
waiting=true;
}
}
}
public void savePic(int i)
{
CurrentPic[i].Image.Save(path1 + "\\" + timepath + "\\"+i.toString()+".bmp");
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询