C#中System.Timers.Timer定时器的elapsed函数传递参数

   笔者最近在使用System.Timers.Timer类时,对于如何在Elapsed事件触发时向事件处理函数传递参数存在一些疑惑,后来总算解决了相关问题。总结如下:


1.匿名函数传递

使用Lambda表达式,编写一个匿名方法,直接在订阅事件的同时实现方法体;代码如下:

<strong> </strong><span style="font-weight: bold; white-space: pre;">	</span><span style="font-size:14px;color:#3366ff;">System.Timers.Timer m_timerCheckDTUState=null ;</span>
<span style="font-size:14px;color:#3366ff;"><span style="white-space:pre">		</span>//传递的参数  test</span>
<span style="font-size:14px;color:#3366ff;"> <span style="white-space:pre">		</span>var test = "this param is a test";
            m_timerCheckDTUState = new System.Timers.Timer();
            m_timerCheckDTUState.Interval = 6000;
            m_timerCheckDTUState.Start();  
            //传递参数方法一
            m_timerCheckDTUState.Elapsed += (sender, e) => { 
                Console.WriteLine(test);
                } ;</span>

  当然,这个事件处理函数比较简单,如果觉得这样会导致代码冗余,也可以不使用匿名方法,方法如下


2.非匿名函数传递


 <span style="white-space:pre">		</span><span style="font-size:18px;">System.Timers.Timer tmr = new System.Timers.Timer();
            tmr.Interval = 500;
            tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
            tmr = new System.Timers.Timer();
            string test="</span><span style="color: rgb(51, 102, 255); font-size: 14px; font-family: Arial, Helvetica, sans-serif;">this param is a test</span><span style="font-size:18px;">";
            //传递参数方法2
            tmr.Elapsed += new ElapsedEventHandler((s,e)=>tmr_Elapse(s,e,test));
           
            tmr.Start();</span>


接下来实现方法体:

<span style="font-size:18px;"><span style="white-space:pre">	</span> void tmr_Elapse(object sender, ElapsedEventArgs e,string a)
        {
            Console.WriteLine("Tick...tick tick"+a);
        }</span>



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值