0
点赞
收藏
分享

微信扫一扫

C# 中多种定时器


C# 中多种定时器

  • ​​`System.Windows.Threading.DispatcherTimer`微软为WPF专门定制的一个定时器​​
  • ​​`System.Threading.Timer`​​
  • ​​`System.Timers.Timer`​​

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.Timer​​​ 和 ​​System.Timers.Timer​​​ 在精准度上优于 ​​System.Windows.Threading.DispatcherTimer​​ 定时器

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

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


举报

相关推荐

0 条评论