C# 线程中使用Timer,并向其触发的事件(函数)中传递参数

来源:互联网 发布:ios网络开发教程 编辑:程序博客网 时间:2024/05/18 03:28

C#中的三个Timer我就不作说明了,这里要说的是如果你在线程中使用Timer,是不能使用System.Windows.Forms.Timer的,微软的注释很明确:“实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。”,在线程中使用,其相应的事件是不会触发的。

 

在什么地方使用什么样的Timer不是本文所要谈论的。这里仅对在使用Timer的时候的参数传递进行探讨。

■①在System.Windows.Forms.Timer 中我们如果需要在Timer所触发的事件中传递一个参数可以用一下属性Tag,也就是在启动Timer的时候给这个属性赋值,在被触发之后是可以从中取出并使用的:

 

如:Timer触发的事件为:void _ringTimer_Tick(object source, EventArgs e),则可将source转型为Timer,然后就可以得到启动时传递给属性Tag的参数值。

 

■②假若有这样一个需求:在一个线程中需要不定时启动多个Timer,每个Timer所触发的事件是相同的,但需要根据某一个参数在该事件中执行不同的操作(反正就是需要一个参数传递到Timer所触发的事件中),但System.Timers.Timer 所有属性中并不包含可用于传递参数的属性,因而要想在启动Timer的时候注入一个参数,以便在Timer触发的函数中使用,就不那么方便了。

 

System.Windows.Forms.Timer中具有Tag属性,System.Timers.Timer 如果也有一个Tag或更多的最好是自定义的属性岂不更好,是的,我们可以根据需要自定一个Timer即可:

 

 

 

 

贴一个调试图片:

 

 

下面是全部代码:

 

 

 来源:万达源科技

原创粉丝点击