如何在Linux上的.NET Core中获取系统日期更改通知?

时间:2019-05-22 16:04:58

标签: events .net-core .net-standard systemevent

我正在尝试在.NET Core / Standard中获得通知事件(因为我需要计划将来的操作)。我正在将一部分现有的.NET4.5x代码移植到.NET core 2.2或.NETStandard2。

最初我在使用:

SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler

但是在.NETCore或.NETStandard中,this is not implemented

克服这一问题的最优雅的方法是什么?

1 个答案:

答案 0 :(得分:0)

好的,所以最后我做到了(伪代码):

public TimeSpan CheckInterval { get; private set; } = TimeSpan.FromMinutes(1);
public TimeSpan MaxAllowedDeviation { get; private set; } = TimeSpan.FromSeconds(1);

private async Task CheckTimeUpdate()
{
    while (cancelToken.IsCancellationRequested == false)
    {
        DateTimeOffset beforeTimer = DateTimeOffset.Now;

        await Task.Delay(CheckInterval, cancelToken);

        DateTimeOffset afterTimer = DateTimeOffset.Now;

        if ((afterTimer.UtcDateTime - beforeTimer.UtcDateTime).Duration() > MaxAllowedDeviation + CheckInterval)
        {
            //raises the event
            TimeChanged?.Invoke();
        }
    }
}

但这仅适用于手动更改时间,不适用于夏令时或时区更新!