如何在 linux 上的 .NET Core 中获取系统日期更改通知?
How to get a system date change notification in .NET core on linux?
我正在尝试在 .NET 中获取通知事件 core/Standard(因为我需要计划未来的操作)。我正在将一段现有的 .NET4.5x 代码移植到 .NET core 2.2 或 .NETStandard2。
原来我用的是:
SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler
但在 .NETCore 或 .NETStandard 中,this is not implemented。
克服这个问题最优雅的方法是什么?
好的,所以最后我这样做了(伪代码):
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();
}
}
}
但这只适用于手动更改时间,不适用于夏令时或时区更新!!
我正在尝试在 .NET 中获取通知事件 core/Standard(因为我需要计划未来的操作)。我正在将一段现有的 .NET4.5x 代码移植到 .NET core 2.2 或 .NETStandard2。
原来我用的是:
SystemEvents.TimeChanged += SystemEvents_TimeChanged; //my handler
但在 .NETCore 或 .NETStandard 中,this is not implemented。
克服这个问题最优雅的方法是什么?
好的,所以最后我这样做了(伪代码):
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();
}
}
}
但这只适用于手动更改时间,不适用于夏令时或时区更新!!