0

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

最初我使用的是:

SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler

但是在 .NETCore 或 .NETStandard 中,这并没有实现

克服它的最优雅的方法是什么?

4

1 回答 1

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();
        }
    }
}

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

于 2019-05-27T14:01:46.253 回答