问题描述
最近在学c#,学到timer的时候我试着用在以前写的一个程序上,大致是这样的:timer=newXXXX;timer.Interval=5000;timer.Tick+=newEventHandler(timer_Tick);然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。结果我发现得到的日志里经常有一些重复的项。但是当我不用timer而单纯用控件去触发一样的函数时,就不会有这个问题,所以我想问下,是不是timer有什么额外的机制,会启动不止一次?例如单次执行得到:10:30:10010:30:50010:30:90010:31:30010:31:70010:32:100但是使用timer后得到10:30:10010:30:10010:30:50010:30:50010:30:90010:30:90010:31:30010:31:30010:31:70010:31:70010:32:100
解决方案
解决方案二:
放代码
解决方案三:
然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。这块的问题吧还有就是你的400ms就另外启动一个线程去记录这个ping的信息了?
解决方案四:
只能说明你线程没有做同步或加锁,导致随机写入,同一时间可能多个线程都在写入
解决方案五:
timer.Interval=5000;你把它改小一点你就明白了
解决方案六:
然后在timer的tick中启动多线程每个400ms执行一个ping程序,再记录下ping的信息。你想想,每一次tick就会创建一个线程,那最后会有多少个线程
解决方案七:
我可怜的1楼的帖子又被吃了。。。。FXXKCSDN
解决方案八:
1:时间中断处理函数一定要lock一下;2:进入中断前停止计时器,结束中断前重启定时器然后再看看PS:ping和写日志可能比较耗时间