设计一个每隔20ms检查一次状态的程序,用System.Timers.Timer做测试时发现,前几次执行timer调用函数的时间相同(把间隔改到1s以上时无此问题),用lock也用(可能是我不太会用lock)。
改为System.Threading.Timer测试发现:
Threading和Timers的timer在小间隔时都存在此问题,分析后初步判断是初次运行前的间隔时间的问题。
Timers的无法设置初次启动前间隔所以设置20ms间隔时第一次进入前的间隔也是20ms
Threading的可以设置初次启动前的间隔,设置较大间隔后启动,便没有了初次运行时多线程同时进入的情况。

timerClose = new System.Threading.Timer(new TimerCallback(timerCall), null , 20, 20);//多次进入
timerClose = new System.Threading.Timer(new TimerCallback(timerCall), null , 1000, 20);//正常进入



测试用的代码:
System.Timers.Timer 与 System.Threading.Timer 小间隔using System;
System.Timers.Timer 与 System.Threading.Timer 小间隔
using System.Collections.Generic;
System.Timers.Timer 与 System.Threading.Timer 小间隔
using System.Windows.Forms;
System.Timers.Timer 与 System.Threading.Timer 小间隔
using System.Timers;
System.Timers.Timer 与 System.Threading.Timer 小间隔
using System.Threading;
System.Timers.Timer 与 System.Threading.Timer 小间隔
System.Timers.Timer 与 System.Threading.Timer 小间隔
namespace WindowsApplication3
}

相关文章: