2012-12-10 39 views
0

我想实现一个循环功能来执行一些激活的事情,比如每个星期一。如何实现循环功能?

在服务器中连续运行的Window Forms应用程序中以编程方式执行此操作的方法是什么?

我对延迟很熟悉,但是我没有实施延长一周或一个月的延迟。

+3

安排Windows作业? –

+0

我认为我们需要更多的细节,但是你可以写一些执行上述功能的东西,然后根据规范安排它与Windows任务调度程序一起运行。 – turbo

+3

请不要在服务器上使用winforms应用程序。使用服务或预定批次。这样你就不需要登录了。 –

回答

3

在我看来最好的办法是写在一个控制台应用程序这个功能,并使用计划任务的服务器上的任务(或SQL调度程序,或者你最喜欢的调度工具),在任何时间间隔执行它,你需要。

我不喜欢看到应用程序在特定时间执行的代码中存在“隐藏”任务。没有通知而失败的机会太多。

使用排程工具,您可以查看/更改排程而无需触摸源代码。

作为便笺,Windows窗体应用程序应该在客户上运行,而不是服务器上。

1

如果你的应用程序已经运行反正,我会做的是有来检查您是否希望做你的每周任务

这里的psudocode证明逻辑周期性任务。

if(today is Monday && i didn't do this task yet today) 
{ 
    //do monday stuff 
} 
+0

这可能会起作用,但是它不需要所述程序全天候运行,即使它在星期一运行(可能一次)?似乎有太多的开销/空间让人无法察觉。 – turbo

+0

@turbo,以及op在服务器上连续运行的Window Forms应用程序中要求提供解决方案'' –

+0

啊,你是对的,我的错误。 – turbo

0

理想情况下,您应该在Windows计划任务下执行此操作。然后,它会处理复发和时间。

如果你需要通过winforms应用程序来做到这一点,那么有两种选择 - 周期性时间轮询或阻塞等待/睡眠。

使用周期性时间轮询,您可以设置应用程序必须运行的时间间隔。然后在循环中检查这段时间是否已过,并采取行动。您可以在回路中设置所需的准确级别。

由于阻塞等待,您正在运行线程,直到需要执行为止。这种方法唯一的问题是如果服务器重新启动,应用程序应该重新获得它的状态并恢复任何睡眠操作。这种方法的准确性应该在几秒钟内(取决于服务器的时间漂移​​)。