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

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

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

我需要补充一些有关这方面的信息:

  • 最简单的(也是丑陋的)方法,就是每秒钟/分钟检查一次时间,并在正确的时间调用该方法。

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

我找到了这个解决方案用Java在固定时间调用方法在爪哇。在C#中有类似的方式吗?

编辑:我做过这个。我在voidmain()中添加了一个参数,并创建了一个BAT(由WindowsTaskScheduler调度)来使用该参数运行程序。程序运行,完成工作,然后退出。如果一个工作失败,它可以写日志和发送电子邮件。此方法非常适合我的需求:)


米琪卡哇伊
浏览 975回答 3
3回答

紫衣仙女

创建一个控制台应用程序来完成您想要的任务使用Windows“预定任务“在需要运行控制台应用程序时执行它的功能。这才是你真正需要的!最新情况:如果您想在应用程序中执行此操作,您有以下几种选择:在.Windows窗体应用程序,你可以点击Application.Idle事件,并检查是否达到了一天中调用方法的时间。只有当你的应用程序不忙于其他事情时,才会调用这个方法。快速检查一下你的目标时间是否已经达到,不应该给你的应用程序带来太大的压力,我想.在ASP.NETWeb应用程序中,有一些方法可以“模拟”发送预定事件-请查看以下内容CodeProject文章当然,您也可以在任何.NET应用程序中简单地“滚动您自己的”-请查看以下内容CodeProject文章用于示例实现更新#2如果您想每60分钟检查一次,您可以创建一个计时器,它每60分钟唤醒一次,如果时间到了,它将调用该方法。就像这样:using System.Timers;const double interval60Minutes = 60 * 60 * 1000; // milliseconds to one hourTimer checkForTime = new Timer(interval60Minutes);checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);checkForTime.Enabled = true;然后在事件处理程序中:void checkForTime_Elapsed(object sender, ElapsedEventArgs e){     if (timeIsReady())     {        SendEmail();     }}

蝴蝶不菲

每当我构建需要这种功能的应用程序时,始终通过简单的.NET库使用Windows任务计划程序我找到的。请见我对类似问题的回答一些示例代码和更多解释。
打开App,查看更多内容
随时随地看视频慕课网APP