C#计时器调用函数执行时间大于定时器调用时间间隔

小白菜又菜 2014-07-24 05:10:11
我现在有一个WPF的程序,里面用定时器执行一个控制串口的函数。函数分两种情况执行,1.持续检测传感器值;2.在检测到串口的值为目标值时,执行一个运行时间为2s的程序(这个过程不用检测传感器的值)。
现在,如果我的定时器的时间间隔:如果设置太长,传感器的值就不好检测;如果设置太短定,时器上次建立的线程还没结束,就又开始执行定时器中的函数,请问大家有什么解决办法么?(最好改动不大)
代码如下:

void DtTick(object sender, EventArgs e)
{
Filling();
}

int Step = 0;//记录当前执行步骤
void fun1()
{
if ( Step == 1 && getState() )//检测传感器
Step = 2;
else { //执行对应代码
....
System.Threading.Thread.Sleep(2000);
Step = 1;
}
}
...全文
810 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
o249708193 2016-05-05
  • 打赏
  • 举报
回复
引用 4 楼 wike119 的回复:
[quote=引用 1 楼 rtdb 的回复:] 做事的时候禁止定时器,完成后恢复:

        private void Timer1_Tick(object sender, EventArgs e)
        {
                Timer1.Enabled = false;

                //do your things
 
                 Timer1.Enabled = true;
        }
这样是不行的,一旦Timer1.Enabled = false;后面的操作都不会执行了,因为定时器已经停掉[/quote] 有在执行啊。我就是这么做的
wike119 2014-10-26
  • 打赏
  • 举报
回复
引用 1 楼 rtdb 的回复:
做事的时候禁止定时器,完成后恢复:

        private void Timer1_Tick(object sender, EventArgs e)
        {
                Timer1.Enabled = false;

                //do your things
 
                 Timer1.Enabled = true;
        }
这样是不行的,一旦Timer1.Enabled = false;后面的操作都不会执行了,因为定时器已经停掉
小白菜又菜 2014-07-24
  • 打赏
  • 举报
回复
串口数据,需要自己每隔一段时间发送信号,然后读取,不会自己反馈。
bdmh 2014-07-24
  • 打赏
  • 举报
回复
串口不是有接收事件吗,干吗用timer检测值
rtdb 2014-07-24
  • 打赏
  • 举报
回复
做事的时候禁止定时器,完成后恢复:

        private void Timer1_Tick(object sender, EventArgs e)
        {
                Timer1.Enabled = false;

                //do your things
 
                 Timer1.Enabled = true;
        }

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧