首页 新闻 会员 周边

有关System.Windows.Forms.Timer的使用

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-03-18 16:09

我在WinForm程序中使用System.Windows.Forms.Timer定时器,在执行定时器方法时,理论上UI界面应该是没有响应的,实际的结果是可以进行其他操作。

我的定时器是每隔1小时执行一次,是通过调用外部Dll文件远程读取数据,一次读取200多次远程数据。

请问这是什么原因,感觉System.Windows.Forms.Timer是单线程的,在事件执行过程中应该是阻塞UI线程的?

环境:.net framework 3.5 (C#)

youyi000的主页 youyi000 | 菜鸟二级 | 园豆:205
提问于:2013-10-23 16:06
< >
分享
所有回答(2)
0
幻天芒 | 园豆:37175 (高人七级) | 2013-10-23 18:00

看了一下,那什么情况他会创建独立的线程?

支持(0) 反对(0) youyi000 | 园豆:205 (菜鸟二级) | 2013-10-23 19:16

@youyi000: 按照官方的说法,这个Forms.Timer是会阻塞界面响应的,你可以将时间间隔改小一点进行测试。

Timer 用于以用户定义的事件间隔触发事件。 Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。 它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。
使用此计时器时,请使用 Tick 事件执行轮询操作,或在指定的时间内显示启动画面。 每当 Enabled 属性设置为 true 且 Interval 属性大于 0 时,将引发 Tick 事件,引发的时间间隔基于 Interval 属性设置。
此类提供用于设置时间间隔以及启动和停止计时器的方法。

摘自:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.timer.aspx

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-10-23 23:04

@幻天芒: 现在的情况是理论应该是阻塞UI界面响应,但实际情况是界面没有被阻塞,可能的原因是定时器中执行的程序会调用第三方的dll,然后访问远程服务获取数据。

支持(0) 反对(0) youyi000 | 园豆:205 (菜鸟二级) | 2013-10-24 09:31

@youyi000: 第三方dll,可能是多线程的。导致阻塞不了(可能)。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-10-24 10:22
0

TIMER执行是多线程,不是UI线程执行的

56180825 | 园豆:1756 (小虾三级) | 2013-10-23 19:14

System.Windows.Forms.Timer 不是System.Timers.Timer。。。

支持(0) 反对(0) youyi000 | 园豆:205 (菜鸟二级) | 2013-10-23 19:16

@56180825: 关键是在哪个线程执行,是启动定时器所在线程还是新建线程执行。

支持(0) 反对(0) youyi000 | 园豆:205 (菜鸟二级) | 2013-10-23 19:21

@56180825: 我试了下,确实单线程的,我前面说错了

支持(0) 反对(0) 56180825 | 园豆:1756 (小虾三级) | 2013-10-23 20:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册