在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);
  }

问题解决


 

 

远程线程嵌入技术

远程线程嵌入技术   远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的新线程与主线程(就是进...
  • Drate
  • Drate
  • 2003-02-22 09:59:00
  • 1645

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

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

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

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

关于c#中的Timer控件的简单用法

Timer控件Timer控件主要会用到2个属性一个是Enabled和IntervalEnabled主要是控制当前Timer控件是否可用timer1.Enabled=false;不可用timer1.En...
  • cuijianwei74
  • cuijianwei74
  • 2006-10-27 16:45:00
  • 48154

System.Timers.Timer传参问题

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

c# 使用定时器Timer

定时器使用的程序。开始---》不断输入aaa  可以停止 继续。 引用:using System.Timers;  //、、、、、、、、、、、、、、   public partial ...
  • u011394397
  • u011394397
  • 2016-09-21 15:09:26
  • 922

[C#].NET中的三种Timer的区别和用法

//1.实现按用户定义的时间间隔引发事件的计时器。此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用。  System.Windows.Forms.Timer // 2.提供以...
  • aoxuefeihu
  • aoxuefeihu
  • 2012-04-20 23:26:20
  • 42958

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

/* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/23 * Time: 21:30 * * To c...
  • jianghuihong2012
  • jianghuihong2012
  • 2013-11-23 22:26:20
  • 1876

Timer传参问题

写一个Timer的类,里面定义需要传递的参数。 class MyTimer : System.Timers.Timer { int id; public int...
  • liaochunmei
  • liaochunmei
  • 2017-03-13 11:23:30
  • 148

System.Timers.Timer 定时执行程序

System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒         private void Form1_Loa...
  • ybhjx
  • ybhjx
  • 2016-12-16 22:58:49
  • 1828
收藏助手
不良信息举报
您举报文章:在System.timers.timer中给定时器触发的Elapsed事件传递参数
举报原因:
原因补充:

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