日期:2014-05-18  浏览次数:20833 次

请教一个用计时器控制循环的问题,在线等,实现了就给分
private void cycle()
{
  for (i=0;i<=100;i++)
  {
  ....
  timer1.Interval = 5000;
  timer1.start();
  }
}

private void timer1_Tick(object sender, EventArgs e)
{
  if (满足某种条件)
  ???
}


我希望的是,满足条件进行下一步循环,或时间到也进行下一步循环,应该怎么写呢?

------解决方案--------------------
楼主的需求不够清楚,如果不满足条件呢,执行什么动作?
------解决方案--------------------
问题说清楚点行么?
 if (满足某种条件) 
{
cycle()
}

把timer1.start.start()从cycle函数中移出来,到别的地方去

------解决方案--------------------
你上面提到的进入下一步循环,具体是做什么?

要不你贴一点代码出来吧,不然弄不明白你具体的需求
------解决方案--------------------
不好意思,楼主,我所在的公司禁了QQ.

你的问题好像并不复杂呀,对你自己的提问多些描述,这样大家才好理解你的意图,不然很难帮到你呢
------解决方案--------------------
感觉你用timer控制是不行的,不知道你用的什么东西接收的数据,socket上是可以设置超时时间的,这个超时5秒也应该是在socket上设的
------解决方案--------------------
C# code

private void cycle() //自定义的函数 
{ 
  int[] arrayboudrate = new int[9] { 300,1200,2400,4800,115200,9600,19200,38400,57600}; 
  for (i=0;i  <=100;i++)  
   {  

     sp1.BaudRate = arrayboudrate[i1]; 
     //.... //设置串口参数 
     try 
     { 
        sp1.open();//打开串口,开始接收数据 

        timer1.Enabled=false;//如果正常,时间控件为无效状态

         //在这里写代码判断是否接满了你所说的多少位

     }
     catch
     {

        timer1.Enabled=true;//发生错误,时间控件启动
        timer1.Interval = 5000;
      
     } 
  }
}  

private void timer1_Tick(object sender, EventArgs e)  
{
    cycle();//执行该方法
}

------解决方案--------------------

bool iscontinue = false;
private void cycle() //自定义的函数 

int[] arrayboudrate = new int[9] { 300,1200,2400,4800,115200,9600,19200,38400,57600}; 
for (i=0;i <=100;i++)
{

sp1.BaudRate = arrayboudrate[i1]; 
.... //设置串口参数 
try 

iscontinue = false;
timer1.Interval = 5000;
timer1.start();
sp1.open();//打开串口,开始接收数据 
}
catch
{
iscontinue = true;
}
if(iscontinue) continue;
else

if (接收的字符串与协议匹配) 
终止循环 
else 
continue; 

}
}

private void timer1_Tick(object sender, EventArgs e)
{
iscontinue = true;
timer1.stop();
}
------解决方案--------------------
up