我正在尝试在.NET Core / Standard中获得通知事件(因为我需要计划将来的操作)。我正在将一部分现有的.NET4.5x代码移植到.NET core 2.2或.NETStandard2。
最初我在使用:
SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler
但是在.NETCore或.NETStandard中,this is not implemented。
克服这一问题的最优雅的方法是什么?
答案 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();
}
}
}
但这仅适用于手动更改时间,不适用于夏令时或时区更新!