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