gpt4 book ai didi

c# - 如何在特定时间每天在 C# 中调用一个方法?

转载 作者:IT王子 更新时间:2023-10-29 03:42:12 24 4
gpt4 key购买 nike

我在 SO 上搜索并找到了关于 Quartz.net 的答案。但它似乎对我的项目来说太大了。我想要一个等效的解决方案,但更简单且(充其量)在代码中(不需要外部库)。如何在特定时间每天调用一个方法?

我需要添加一些关于此的信息:

  • 执行此操作的最简单(也是最丑陋)的方法是每秒/每分钟检查一次时间并在正确的时间调用该方法

我想要一种更有效的方法来完成这项工作,不需要经常检查时间,而且我可以控制工作是否完成。如果方法失败(因为任何问题),程序应该知道写入日志/发送电子邮件。这就是为什么我需要调用一个方法,而不是安排一个工作。

我找到了这个解决方案 Call a method at fixed time in Java在 java 。 C#中有类似的方法吗?

编辑:我已经做到了。我在 void Main() 中添加了一个参数,并创建了一个 bat(由 Windows Task Scheduler 调度)来运行带有该参数的程序。程序运行,完成工作,然后退出。如果作业失败,它可以写入日志和发送电子邮件。这种方法很符合我的要求:)

最佳答案

  • 创建一个控制台应用来满足您的需求
  • 使用 Windows“Scheduled Tasks”功能让该控制台应用程序在您需要运行时执行

这就是您真正需要的!

更新:如果您想在您的应用中执行此操作,您有多种选择:

  • Windows 窗体 应用中,您可以点击 Application.Idle事件并检查您是否已到达当天调用您的方法的时间。只有当您的应用不忙于其他事情时才会调用此方法。快速检查一下您的目标时间是否已经达到,我认为这不会给您的应用带来太大压力...
  • 在 ASP.NET 网络应用程序中,有一些方法可以“模拟”发送预定事件 - 查看此 CodeProject article
  • 当然,您也可以在任何 .NET 应用程序中简单地“滚动自己的”- 查看此 CodeProject article示例实现

更新#2:如果您想每 60 分钟检查一次,您可以创建一个每 60 分钟唤醒一次的计时器,如果时间到了,它会调用该方法。

像这样:

using System.Timers;

const double interval60Minutes = 60 * 60 * 1000; // milliseconds to one hour

Timer checkForTime = new Timer(interval60Minutes);
checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
checkForTime.Enabled = true;

然后在您的事件处理程序中:

void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
if (timeIsReady())
{
SendEmail();
}
}

关于c# - 如何在特定时间每天在 C# 中调用一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com