C# 中多种定时器

System.Windows.Threading.DispatcherTimer微软为WPF专门定制的一个定时器

/// <summary>
/// 初始化计时器
/// </summary>
private void StartCloseTimer()
{
    DispatcherTimer dispatcherTimer = new DispatcherTimer
    {
        Interval = TimeSpan.FromSeconds(0.2)
    };
    dispatcherTimer.Tick += DispatcherTimer_Tick;
    dispatcherTimer.Start();
}

/// <summary>
/// 定义关闭定时器事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DispatcherTimer_Tick(object sender, EventArgs e)
{
    DispatcherTimer timer = (DispatcherTimer)sender;
    timer.Stop();
    timer.Tick -= DispatcherTimer_Tick; // 取消注册
}

定时器 Start() 以后,也就是启动以后,要记得及时关上!否则会 一直执行下去

System.Threading.Timer

System.Threading.Timer timer;

public void TokenStartCloseTimer()
{
	// 参数:
	//   callback:
	//     一个 System.Threading.TimerCallback 委托,表示要执行的方法。
	//
	//   state:
	//     一个包含回调方法要使用的信息的对象,或者为 null。
	//
	//   dueTime:
	//     调用 callback 之前延迟的时间量(以毫秒为单位)。 指定 System.Threading.Timeout.Infinite 可防止启动计时器。
	//     指定零 (0) 可立即启动计时器。
	//
	//   period:
	//     调用 callback 的时间间隔(以毫秒为单位)。 指定 System.Threading.Timeout.Infinite 可以禁用定期终止。
	timer = new System.Threading.Timer(new TimerCallback(timerCall), null, 1000, 0);
}

public void TimerCall(object o)
{
    timer.Dispose();//释放定时器
}

System.Timers.Timer

/// <summary>
/// 初始化计时器
/// </summary>
public void StartCloseTimer()
{
    // 参数 时间 单位 ms
    System.Timers.Timer timer = new System.Timers.Timer(1000);
    timer.Elapsed += Timer_Elapsed;
    timer.AutoReset = false; // false 只执行一次,true 不停的执行
    timer.Enabled = true;
    timer.Start();
}

/// <summary>
/// 事件处理程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <remark>达到设置的间隔时间将设置该事件的事件处理程序</remark>
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    /**
    	执行代码块
    */
}

还有一种定时器 System.Windows.Forms.Timer 这里不再论述,有机会用上的可能性比较小。

所有的定时器本质上还是多线程,所以不要拘泥于定时器表面,搞定多线程便好。

线程计时器 即 System.Threading.TimerSystem.Timers.Timer 在精准度上优于 System.Windows.Threading.DispatcherTimer 定时器

个人比较喜欢使用 System.Threading.Timer 计时器 便于控制

上述的代码比较简单,也不能做到符合业务需求,归根结底还是根据业务需求来制定相应的逻辑条理。知识不能只做到浅尝辄止,会用的下一步就是究其原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑夜中的潜行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值