社区
C#
帖子详情
请教:所谓的线程定时器(System.Timers.Timer)用法
Gujianda
2020-08-11 09:22:29
最近因为想提高点定时精度,依葫芦画瓢地用了几个“线程定时器(System.Timers.Timer)”。
简单测试发现:无论设置Enable=false,还是调用Stop()、Close()方法,都是迫使定时器"停止"并"清零";
然后无论设置Enable=true,还是调用Start(),都是从头开始。我原以为Stop()方法类似"暂停"。
果然如此吗?
...全文
1931
9
打赏
收藏
请教:所谓的线程定时器(System.Timers.Timer)用法
最近因为想提高点定时精度,依葫芦画瓢地用了几个“线程定时器(System.Timers.Timer)”。 简单测试发现:无论设置Enable=false,还是调用Stop()、Close()方法,都是迫使定时器"停止"并"清零"; 然后无论设置Enable=true,还是调用Start(),都是从头开始。我原以为Stop()方法类似"暂停"。 果然如此吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wanghui0380
2020-08-12
打赏
举报
回复
至于你说的重新计时的问题。 实际上你的要求我们都直接拿Environment.TickCount 的,包括我上面说我想生成一个方波,我们也只是需要线程里不停循环拿tick带入三角函数里计算
wanghui0380
2020-08-12
打赏
举报
回复
我个人认为于其纠结所谓的timer,不如直接做个“信号发生器” 正常情况,你这类要求我们当做“方波信号发生器”,俺们压根不管啥停止不停止,高位做事,低位不做
天明月圆
2020-08-12
打赏
举报
回复
看楼主的意思是在定时器绑定函数里对定时器进行启动停止操作。正常情况应该是按照楼主的描述执行的。可以将你的业务抽象成一个简单的例子把代码贴出来吗?然后让大家帮忙看看
Gujianda
2020-08-12
打赏
举报
回复
上面最后一句()里应该是:(Enable=false)。
另外补充:但如果达到终值后,调用Close()方法则可以停止!
Gujianda
2020-08-12
打赏
举报
回复
楼上的Z467057213c,谢谢!
我需要的任务是:执行固定次数的重复操作(发令、配合切换相关电路)。
我目前的做法是:①实例化这个时钟时,设置为单次执行(AutoReset=false)
②在定时器绑定的触发事件中,(先干事)判步骤号,小于终值就再次使能这个定时器、达到终值就不再激活。。。
结果,诡异的是:达到终值后(Enablekending=false了),不断地重新进入触发事件。。。根本停不下来!
z467057213c
2020-08-12
打赏
举报
回复
首先明白一点,System.Timers.Timer启动的机制,都是设置Enabled=true或false来控制启动停止,即便是Start,Stop,也只是封装了对于Enabled属性的控制,还有Close是释放计时器线程所占据的资源。另外需要注意一点,这个定时器是多线程定时器,意味着只要时间间隔到了就会执行既定动作,而不会管你上次的动作执行完没,例如设置时间间隔100ms,但是你的处理动作需要处理10s,显然在这个时间间隔内是处理不完的,下次动作会直接处理,而非等待上次的完成在延缓时间,所以也就不存在暂停这个问题。
github_36000833
2020-08-12
打赏
举报
回复
从你说的"暂停"上看,可能你需要一个计时器,而不是定时器。 计时器可以用System.Diagnostics.Stopwatch, 用Stopwatch计时, 用Timer来每秒显示计时结果。
Gujianda
2020-08-12
打赏
举报
回复
@z467057213c,你说到的“...还有Close是释放计时器线程所占据的资源”,这话在我的实验中没见痕迹。
因为无论属性"Ebabled=false"还是"方法Stop()"、"方法Close"停止计时后,都能用属性Enabled=true重新启动。
八爻老骥
2020-08-11
打赏
举报
回复
那就取更小的tick值,自己累加啊。
C#多
线程
刷新界面卡死测试程序
1、测试调用委托时BeginInvoke和Invoke的表现差异 2、System.
Timer
s.
Timer
多
线程
刷新界面 3、System.Threading.ThreadPool多
线程
刷新界面 4、System.Threading.Thread多
线程
刷新界面
C#中自定义高精度
Timer
定时器
的实例教程
(3)定义在System.
Timer
s.
Timer
类里
Timer
用于以用户定义的事件间隔触发事件。Windows 计时器是为单
线程
环境设计的,其中,UI
线程
用于执行处理。它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个
线程
中...
延时功能的实现C#源代码
Timer
类:System.
Timer
s.
Timer
类是一个
定时器
,它可以定期触发Elapsed事件。你可以在Elapsed事件处理函数中执行需要定期执行的操作。通过设置
Timer
的Interval属性,你可以控制触发Elapsed事件的频率。 ...
c# 区分几种
定时器
(
timer
)
1、前言 不知道你是否对.NET里面的
定时器
产生过一些疑问,以下是武小栈个人的一些总结。 2、官方介绍 在.NET的框架之内
定时器
有四种,先... 与 System.
Timer
s.
Timer
类一样,此类用作多
线程
环境中基于服务器的或服务
C# 串口收发异常,偶尔有某个收不到,断点计数都断不到,原因分析(1)
经了解:C#消息机制是消息流水线响应机,不能同时进行。 C# 数据更新是在
Timer
,分析:可能是在... System.
Timer
s.
Timer
a
Timer
= new System.
Timer
s.
Timer
(); a
Timer
.Elapsed += new System.
Timer
s.ElapsedEven
C#
110,535
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章