做一个心跳检测
构造函数
public MainViewModel()
{
t1 = new System.Threading.Timer(p =>
{
var startTime = DateTime.Now;
ClientService.Instance.HeartBeat(HeartToken);//调用心跳方法,传入当前的HeartToken
HeartToken ^= 1;//在0和1之间切换 例如:01=1,11=0
var executeTime = DateTime.Now - startTime;
var nextDelay = TimeSpan.FromMilliseconds(500) - executeTime;//目标间隔500ms减去实际执行时间 目的:保持固定的500ms间隔(从开始到下一次开始)
if (nextDelay.TotalMilliseconds < 0)//如果执行时间超过500ms,将延迟设为1秒 防止执行时间过长导致立即触发下一次调用
{
nextDelay = TimeSpan.FromSeconds(1);
}
t1.Change(nextDelay, Timeout.InfiniteTimeSpan);//重新设置计时器,在nextDelay后再次触发 保持单次触发模式
}, null, TimeSpan.Zero, Timeout.InfiniteTimeSpan);//立即开始:TimeSpan.Zero 表示不等待立即执行第一次回调
//单次触发:Timeout.InfiniteTimeSpan 表示只触发一次,不自动重复
}
protected int HeartToken = 0;
protected System.Threading.Timer t1;

浙公网安备 33010602011771号