收录日期:2021/02/27 21:04:28 时间:2016/07/13 20:55:32 标签:ASP.NET
 已经知道WidForm的Timer不是真正的多线程,它是单线程运行的,
 如果timer的频充是每5秒触发一次,,,但是我的触发函数如果长于5秒处理完,它会等待我处理完再触发,,
 但是如果我的窗体里有两个Timer,也就是timer1与timer2那它们应该怎么触了呢? 假如timer1没处发完,timer2就得等吗?事实好象不是这样,为会么呢??????winform不熟,请高手指点,谢谢,,
Timer本身为什么要是多线程的呢?如果你明知道你的处理过程可能超过5秒,那么你可以在Timer的触发事件里再新开一个独立的线程,然后在里面跑你那个可能超过5秒也可能不超过5秒的处理啊。既然这个设计是功能完备的,问题也就解决了。
两个timer的话,两个是单独的,互不影响的

第一个事件时间大于定时器的时间间隔的话,那只能是将那一次隔开执行了
如果你真的想知道两个Timer是否共用一个Thread,动手做一下实验就知道了。在它们的触发事件里把Thread.ManagedThreadId打印出来,看看是不是一样的,不就知道咯。
TO : llsen
为什么两个互不影响,
To: cat_hsfz
我测试了,线程ID一样的,说明是在同一个线程里,

问题是即然是同一个线程里了,那肯定得有个顺序执行吧,为什么如果放两个timer控件,它们不影响呢????????????????????????
参考
引用 4 楼 AA123456 的回复:
TO : llsen 
为什么两个互不影响, 
To: cat_hsfz 
我测试了,线程ID一样的,说明是在同一个线程里, 

问题是即然是同一个线程里了,那肯定得有个顺序执行吧,为什么如果放两个timer控件,它们不影响呢????????????????????????


原因要从底层说起,Windows上的定时器是通过定时器消息来实现的。如果线程被第一个定时器阻塞,第二个定时器是不会执行的。

至于为什么出现不同结果,这取决于楼主的Timer1处理函数如何实现
1、如果你的Timer1处理函数中直接调用Thread.Sleep(5000),那么你的Timer2肯定不会执行了,因为窗口线程阻塞了

2、如果你的Timer1处理函数中创建了模态窗口(例如,MessageBox.Show或者Form1.ShowDialog等),虽然函数没有返回,但Timer1和Timer2都会正常执行。这是因为模态窗口内部带有消息循环的,定时器消息依然得到处理。
引用楼主 AA123456 的帖子:
假如timer1没处发完,timer2就得等吗?事实好象不是这样,为会么呢??????winform不熟,请高手指点,谢谢,,


事实上就是timer1没完成,timer2就得等.......
OK,明白了,谢谢楼上的几位

继承这个 ResultSet接口后getString方法的问题。在线急。 [转帖]老外对T-sql的研究:一个问题多种方法.太精彩了! 关于邮件发送代理的问题 麻将源码下载 将word中的字符与html中的标记形成一个对照表 大家支持一下!!! 楼主帮个忙号召大家支持一下 大哥,大姐们,你们谁有Oracle Spatial?给小弟一个谢谢 求源码 基于WEB的远程教育系统 ASP.NET+SQL Server PHP书籍竟然从书店撤柜了!? 有空的朋友路过请支持,统计!!!!!! 问一个数据库方面的超简单问题啊 VSS管理开发时候 找不到SQL SERVER Internal error: L1333 求MM/dd/yyyy日期正则表达式 国家的计算机和软件资格水平考试证书在工作中是不是真的有用处??在加工资一块有用么?? delphi盒子里面怎么下载啊? 不知道 浮点数能进行位运算吗~? 关于linkbutton和的postback 梅雪香日期控件调用问题:缺少\";\" 知道对方的超级用户密码,如何进行控制 图象拆分问题?? 关于web上传与下载的问题,请高手帮忙我只有31分了~~~~ 急~~~~~~如何从varchar类型转换成money 新手求助!!!关于c++的简单问题, 求一段DATAGRID的滚动代码,谢谢! 急! 关于复制代理的用户权限和IDENTITY属性。在线等 DataGrid为什么不跨列 问个查询语句 问大家一个简单的问题 IPeresistStream::Save 和load的使用? 想转行,请过来人给点建议