using System;
using System.Collections.Generic;
using System.Text;
namespace CS
{
public partial class Timer
{
/// <summary>
/// 声明委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void TaskEventHandler(object sender, TaskEventArgs e);
/// <summary>
/// 任务开始时触发事件
/// </summary>
public event TaskEventHandler Task;
/// <summary>
/// 获取或设置任务ID
/// </summary>
public string TaskID;
/// <summary>
/// 获取或设置任务延时(单位:秒)
/// </summary>
public double Timeout;
/// <summary>
/// 获取或设置错误次数
/// </summary>
public int Error;
private bool tasking;
/// <summary>
/// 指示是否正在执行任务
/// </summary>
public bool Tasking
{
get
{
return tasking;
}
}
/// <summary>
/// 任务调度器
/// </summary>
private System.Timers.Timer TaskTimer = new System.Timers.Timer();
/// <summary>
/// 初始化定时器
/// </summary>
public Timer()
{
this.TaskID = null;
this.Timeout = 0;
this.Error = 0;
this.TaskTimer.AutoReset = false;
this.TaskTimer.Elapsed += new System.Timers.ElapsedEventHandler(Timeout_Elapsed);
}
/// <summary>
/// 初始化定时器并指定任务ID及任务延时
/// </summary>
/// <param name="taskID">任务ID</param>
/// <param name="timeout">任务延时(单位:秒)</param>
public Timer(string taskID, double timeout)
{
this.TaskID = taskID;
this.Timeout = timeout;
this.Error = 0;
this.TaskTimer.AutoReset = false;
this.TaskTimer.Elapsed += new System.Timers.ElapsedEventHandler(Timeout_Elapsed);
}
private void Timeout_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (this.Task != null)
{
this.tasking = true;
this.Task.Invoke(this.Task.Target, new TaskEventArgs(this.TaskID, this.Timeout));
}
}
/// <summary>
/// 启动定时器
/// </summary>
public void Start()
{
if (this.Timeout < 3)
this.TaskTimer.Interval = 3000;
else
this.TaskTimer.Interval = this.Timeout * 1000;
this.TaskTimer.Start();
}
/// <summary>
/// 停止定时器
/// </summary>
public void Stop()
{
this.Error = 0;
this.TaskTimer.Stop();
this.tasking = false;
}
/// <summary>
/// 重启定时器
/// </summary>
public void Restart()
{
this.Stop();
this.Start();
}
/// <summary>
/// 关闭定时器
/// </summary>
public void Close()
{
this.TaskTimer.Stop();
this.TaskTimer.Close();
this.TaskTimer.Dispose();
}
}
}