static void Main(string[] args)
{
#region 定时器
TimerDemo td = new TimerDemo("TimerDemo", 1000);
td.Enabled = true;
td.TickEvent += TestHandler;
Thread timer = new Thread(td.Run);
timer.Start();
#endregion
Console.ReadLine();
} /// <summary>
/// 测试用事件
/// </summary>
static void TestHandler()
{
Console.WriteLine(DateTime.Now.ToLongTimeString());
}

  

public class TimerDemo

    {
//线程名
string _ThreadName;
public string ThreadName
{
get { return _ThreadName; }
private set { _ThreadName = value; }
}
//时间间隔
int _TimeInterval;
public int TimeInterval
{
get { return _TimeInterval; }
set { _TimeInterval = value; }
}
//当前计时器是否启用 true:启用 false:不启用
bool _Enabled;
public bool Enabled
{
get { return _Enabled; }
set { _Enabled = value; }
}
//每隔一段时间需要运行的事件
public delegate void TickEventHandler();
public event TickEventHandler TickEvent;
/// <summary>
/// 建立一个计时器(构造函数)
/// </summary>
/// <param name="ThreadName">线程名</param>
/// <param name="TimeInterval">时间间隔</param>
public TimerDemo(string ThreadName, int TimeInterval = int.MaxValue)
{
this.ThreadName = ThreadName;
this.TimeInterval = TimeInterval;
this.Enabled = false;
}
/// <summary>
/// 定期执行事件
/// </summary>
public void Run()
{
while (true)
{
//如果当前计时器并未启用,则每隔一段时间检测是否被启用
if (!this.Enabled)
{
Thread.Sleep(100);
continue;
}
//触发事件TickEvent
if (TickEvent != null)
{
TickEvent();
}
//休眠一定的时间,等待下一个循环
Thread.Sleep(TimeInterval % 100);
for (int temp = 0; temp < TimeInterval / 100; temp++)
{
Thread.Sleep(100);
if (!this.Enabled)
{
break;
}
}
}
}
}

  

最新文章

  1. 【iOS】UITabView/UICollectionView 全选问题
  2. Django入门1
  3. linux下打包命令的使用
  4. ups机制下停电提前关闭oracle数据库
  5. RG100A-AA 中大校园网上网及远程配置
  6. find命令之xargs
  7. bzoj 3053 HDU 4347 : The Closest M Points kd树
  8. String分割类
  9. FFmpeg 学习(六):FFmpeg 核心模块 libavformat 与 libavcodec 分析
  10. [Linux] Vim 撤销 回退 操作
  11. 15、解决14中csv用excel打开乱码的问题 open(&#39;zhihu.csv&#39;,&#39;w&#39;,newline=&#39;&#39;,encoding=&#39;utf-8-sig&#39;)
  12. css-tips
  13. redis学习——数据持久化
  14. (后端)sql手工注入语句&amp;SQL手工注入大全(转)
  15. Swarm基于多主机容器网络 - overlay networks 梳理
  16. lua闭包
  17. sql 对某列取值进行if判断
  18. 使用Git Hooks实现开发部署任务自动化
  19. 由于BOM头导致的Json解析出错
  20. 黄聪:利用iframe实现ajax 跨域通信的解决方案(转)

热门文章

  1. 服务器+nextcloud搭建自己的私有云盘
  2. 常见线程池 newFixedThreadPool 的简单使用
  3. linux下core 相关设置
  4. 【微服务】- SpringCloud中Config、Bus和Stream
  5. B/S与C/S
  6. Nginx http重定向https
  7. NoSQL之Redis配置与优化
  8. python进阶(24)Python字典的底层原理以及字典效率
  9. python——平时遇到问题记录
  10. vue中的钩子函数