c# - 计时器每 5 分钟运行一次

标签 c#

如何每 5 分钟运行一次函数?示例:我只想在 14:00、14:05、14:10 等时间运行 sendRequest()

我想在 C# 中以编程方式进行。该应用程序是一项 Windows 服务。

最佳答案

使用System.Threading.Timer .您可以指定一个方法来定期调用。

例子:

Timer timer = new Timer(Callback, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));

public void Callback(object state) {
    Console.WriteLine("The current time is {0}", DateTime.Now);
}

您可以使用第二个参数将状态传递给回调。

请注意,您需要以某种方式让您的应用程序保持事件状态(例如,将其作为服务运行)。

至于如何确保它运行在hh:mm where mm % 5 == 0,你可以这样做。

DateTime now = DateTime.Now;
int additionalMinutes = 5 - now.Minute % 5;
if(additionalMinutes == 0) {
    additionalMinutes = 5;
}
var nearestOnFiveMinutes = new DateTime(
    now.Year,
    now.Month,
    now.Day,
    now.Hour,
    now.Minute,
    0
).AddMinutes(additionalMinutes);
TimeSpan timeToStart = nearestOnFiveMinutes.Subtract(now);
TimeSpan tolerance = TimeSpan.FromSeconds(1);
if (timeToStart < tolerance) {
    timeToStart = TimeSpan.Zero;
}

var Timer = new Timer(callback, null, timeToStart, TimeSpan.FromMinutes(5));

请注意,tolerance 是必需的,以防此代码在 now 非常接近最近的 hh:mm 时执行 >毫米 % 5 == 0。您可能可以选择小于一秒的值,但我会把它留给您。

关于c# - 计时器每 5 分钟运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4409558/

相关文章:

C# 用阴影给图像着色

c# - 在调试时序列化并打印对象的整个状态

c# - ASP.NET WEBAPI Core 中的模型状态验证

c# - 鼠标滚轮在 winforms 中冒泡?

c# - ASP.NET5 MVC6 中的 App_Data 目录

c# - Entity Framework : CascadeOnDelete only if parent object is deleted

c# - 广播 ping 是如何工作的?

c# - PreRegistrationHandler 没有因任务错误代码而失败

c# - 匿名方法的丑陋之处和优点-C#

c# - Resharper 认为 typecast 是多余的,但是没有 typecast 代码是行不通的