在System.timers.timer中给定时器触发的Elapsed事件传递参数

原创 2007年10月12日 17:26:00

一个项目中用到大量的定时器,用来做定时的任务。比如定时给某个客户发送短信之类的。

现在定时器触发事件之后需要给事件传递一个参数过去。其中可能包括这个任务的一些必需的信息,

System.Timers.Timer的事件处理方法如下:

  public abstract void TimerEvent(object sender, ElapsedEventArgs e);  

先看了看 timer,和ElapsedEventArgs 中有没有能利用起来的属性。发现不可能。

于是 打算继承 ElapsedEventArgs ,用来传递参数。但是找不到设置timer发送继承之后的ElapsedEventArgs 的方法,这种办法也不行。

最后继承System.Timers.Timer

using System;

namespace TaskSchedulerManager
{
 /// <summary>
 /// 自定义定时器
 /// </summary>
 public class TaskTimer : System.Timers.Timer
 {
  #region <变量>
  /// <summary>
  /// 定时器id
  /// </summary>
  private int id;
  /// <summary>
  /// 定时器参数
  /// </summary>
  private  string param ;
  #endregion

  #region <属性>
  /// <summary>
  /// 定时器id属性
  /// </summary>
  public int ID
  {
   set{id = value;}
   get{return id;}
  }
  /// <summary>
  /// 定时器参数属性
  /// </summary>
  public string Param
  {
   set{param = value;}
   get{return param;}
  }
  #endregion

  /// <summary>
  /// 构造函数
  /// </summary>
  public TaskTimer() : base ()
  {

  }
  
 }
}

然后在事件处理方法中:将sender 转型为System.timers.timer

/// <summary>
  /// timer  Elapsed事件的处理方法
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
public override void TimerEvent(object sender, System.Timers.ElapsedEventArgs e)
  {
   //Console.WriteLine("DllTwo:" + DateTime.Now.ToString());
   TaskSchedulerManager.TaskTimer tt = (TaskTimer)sender;
   Console.WriteLine("id : " + tt.ID);
   Console.WriteLine("Param: " + tt.Param);
  }

问题解决


 

 

System.Timers.Timer 定时执行程序

System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒         private void Form1_Loa...
  • ybhjx
  • ybhjx
  • 2016年12月16日 22:58
  • 1407

Timer 控件中的Elapsed事件与tick事件的区别

public System.Timers.Timer Timer1 = new System.Timers.Timer(); elsapsed事件是在另一个线程中引发的 。如果 elapsed事件...
  • Andrewniu
  • Andrewniu
  • 2017年09月06日 18:02
  • 475

System.Timers.Timer传参问题

转自:http://bbs.csdn.net/topics/390889626 问:System.Timers.Timer怎么给刷新函数传递多个参数?不使用全局变量 解决:如果方便传递参数,可以自...
  • u012252959
  • u012252959
  • 2016年01月14日 16:46
  • 1161

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

笔者最近在使用System.Timers.Timer类时,对于如何在Elapsed事件触发时向事件处理函数传递参数存在一些疑惑,后来总算解决了相关问题。总结如下: 1.匿名函数传递 使用L...
  • shellykenan
  • shellykenan
  • 2016年09月13日 19:45
  • 3476

timer.schedule方法中参数详解

timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);  第一个参数"new MyTask(event.getSe...
  • c_z_w
  • c_z_w
  • 2016年09月09日 14:37
  • 4576

C#动态定时器+传参定时器

/* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/23 * Time: 21:30 * * To c...
  • jianghuihong2012
  • jianghuihong2012
  • 2013年11月23日 22:26
  • 1745

Timer Elapsed

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);把aTimer的Elapsed事件委托给了OnTimedEvent()...
  • ysf871104
  • ysf871104
  • 2011年03月25日 16:48
  • 1721

在System.timers.timer中给定时器触发的Elapsed事件传递参数

一个项目中用到大量的定时器,用来做定时的任务。比如定时给某个客户发送短信之类的。现在定时器触发事件之后需要给事件传递一个参数过去。其中可能包括这个任务的一些必需的信息,System.Timers.Ti...
  • hnzhangshilong
  • hnzhangshilong
  • 2011年10月29日 16:16
  • 4932

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

笔者最近在使用System.Timers.Timer类时,对于如何在Elapsed事件触发时向事件处理函数传递参数存在一些疑惑,后来总算解决了相关问题。总结如下: 1.匿名函数传递 使用L...
  • shellykenan
  • shellykenan
  • 2016年09月13日 19:45
  • 3476

通过案例学调优之--Oracle Time Model(时间模型)

通过案例学调优之--Oracle Time Model(时间模型)650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/57/7E/wKi...
  • lqx0405
  • lqx0405
  • 2015年03月31日 12:11
  • 4611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在System.timers.timer中给定时器触发的Elapsed事件传递参数
举报原因:
原因补充:

(最多只允许输入30个字)