我想实施一个周期性的功能来做一些激活的事情,比如每个星期一。
在服务器中连续运行的Window Forms应用程序中以编程方式执行此操作的方法是什么?
我对延迟很熟悉,但我没有实施延迟一周或一个月的延迟。
答案 0 :(得分:3)
在我看来,最好的办法是在Console应用程序中编写此功能,并使用Scheduled Tasks(或SQL Scheduler,或您最喜欢的Scheduling工具)在服务器上创建任务,以便在您需要的任何时间间隔执行它。
我不希望应用程序在特定时间执行的代码中有“隐藏”任务。没有通知就有太多机会失败。
使用计划工具,您无需触摸源代码即可查看/更改计划。
作为附注,Windows Forms应用程序应在客户端上运行,而不是在服务器上运行。
答案 1 :(得分:1)
如果您的应用程序已经在运行,我会做的是定期执行任务,检查您是否要执行每周任务
这是用来演示逻辑的psudocode。
if(today is Monday && i didn't do this task yet today)
{
//do monday stuff
}
答案 2 :(得分:0)
理想情况下,您应该在Windows计划任务下执行此操作。然后它将处理重复发生和时间安排。
如果您需要通过winforms应用程序执行此操作,则有两个选项 - 定期时间轮询或阻塞等待/休眠。
使用定期时间轮询,您可以设置应用程序必须运行的时间间隔。然后在循环中检查此时间段是否已经过去,并采取措施。您可以在循环中设置所需的准确度。
使用阻塞等待,您将睡眠正在运行的线程,直到执行为止。此方法的唯一问题是,如果服务器重新启动,应用程序应重新获得其状态并恢复任何睡眠操作。这种方法的准确性应该在几秒钟内(取决于服务器的时间漂移)。