为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

在编写 “Wifi 固定器 ” 程序时,按如下方式使用了定时器:.

// 声明;private Timer _Timer = new Timer() { Interval = 1, AutoReset = true };
// 设置处理方法;_Timer.Elapsed += new ElapsedEventHandler(TimerHandler);
/// <summary>/// 定时器任务/// </summary>private async void TimerHandler(object source, ElapsedEventArgs e){    if (_Timer.Interval == 1) // 如果是第一次执行    {        _Timer.Interval = 1000 * Configs.CheckInterval; // 设置 Interval 为想要的间隔时间。    }
    // 刷新连接状态;    _profileRadio = GetProfileRadio(_fixedWifiPack);    if (_profileRadio.IsConnected)    {        Console.WriteLine("该 Wifi 已连接,无需操作");        return;    }
    Console.WriteLine($" 即将尝试连接【{_fixedWifiPack.Ssid}】...");    bool result = await NativeWifi.ConnectNetworkAsync(_fixedWifiPack.Interface.Id, _fixedWifiPack.ProfileName,        _fixedWifiPack.BssType, TimeSpan.FromSeconds(5));    Console.WriteLine($"连接结果:{(result ?" 成功 " : " 失败 ")}");}
// 开启if (_Timer.Enabled){    Console.WriteLine($"目前监控已处于开启状态,无需重复操作");    return;}_Timer.Start();Console.WriteLine($"【开启监控成功】检测间隔时间为 {Configs.CheckInterval}s");
// 关闭if (!_Timer.Enabled){    Console.WriteLine($"目前监控已处于关闭状态,无需重复操作");    return;}_Timer.Stop();_Timer.Interval = 1;Console.WriteLine($"【关闭监控成功】{Environment.NewLine}");

现象:

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

也就是,Timer 的 Interval 初始以及停止时,都设置为 1,为的是启动的时候能马上触发一次。然后在第一次触发时修改 Interval 为需要的间隔时间,用作后续的触发间隔。然后问题就来了,修改间隔后的那次触发,距离启动时立马触发的那次,间隔时间达到了设定间隔时间的 3 倍,而且每次都是这样。

修改时间间隔的地方加上先停止后启动,问题依旧:

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

不使用异步方法,问题依旧:

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

怀疑是和线程池有关系,进而和 CPU 核心数有关,我这个是四核:

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

使用 毫秒定时器 或 多媒体定时器 也还是同样的现象。

看到网上也有人遇到类似但不完全相同的问题(《System.Timers.Timer 非常不准确》[4]):

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

可以看到,他是使用了并行计算所以出问题了,但是我这里并没有使用并行计算。

然后网上一个讨论帖(《System.Timers.Timer 为什么会失效??[5])是这样说的:

为什么 System.Timers.Timer 更改间隔时间后的第一次触发时间是设定时间的三倍?

因为怀疑计时不准,所以有好多人自己封装调用 winmm.dll 中的 “多媒体计时器” 来形成自定义的定时器,我尝试了两种(上面提到过),问题还是一样,所以可能他们这种不能解决我遇到的问题。

总之,问题还没解决,所以大家有什么想法或方法,还请不吝赐教。