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.Timer
和System.Timers.Timer
在精准度上优于System.Windows.Threading.DispatcherTimer
定时器
个人比较喜欢使用
System.Threading.Timer
计时器 便于控制
上述的代码比较简单,也不能做到符合业务需求,归根结底还是根据业务需求来制定相应的逻辑条理。知识不能只做到浅尝辄止,会用的下一步就是究其原理