我在asp.net应用程序启动evert中有这个代码,我对Timer类并不熟悉,但我想要做的是每天晚上11点有一个触发器,一个关闭早上5:30,然后每小时一次。
private System.Threading.Timer timer;
protected void Application_Start(object sender, EventArgs e)
{
int intervalMilliseconds = 60 * 1000;
timer = new System.Threading.Timer(new System.Threading.TimerCallback(TimedEvent), null, intervalMilliseconds, intervalMilliseconds);
}
protected void Application_End(object sender, EventArgs e)
{
if (timer != null) timer.Dispose();
}
private void TimedEvent(object stateInfo)
{
MyClass.ExecuteCode();
}
*请不要回答“不要因为生命周期而使用asp.net来做触发器”。 *再次 - 请不要发布什么不使用的帖子。我收到了两个帖子,告诉我什么不使用,两者都与我的问题无关,关于Timer类以及如何使用它。
答案 0 :(得分:2)
根据您的问题,我假设您无法完全控制您的托管环境,因此会尽量避免安排它等等。
话虽如此,您仍然需要了解asp.net生命周期,并且您的触发方法充满了危险。
您是否获得足够的流量,应用程序不会意外结束?你知道IIS的配置吗,所以回收不用担心吗?
我可以看到三种方法:
我建议有一个页面,它使用某种键,这是唯一已知的 由来电者。将此页面由watchmouse(请参阅:http://www.watchmouse.com/en/)或计算机/服务器上的计划爬虫(在您需要触发它时始终打开)触发。
另一种方法是触发数据库进程,该进程在需要时运行。 根据您的环境,也可以安排。
另一种方法是检查日志文件,访问该页面的用户,如果它是一小时内的第一次访问,则触发您的进程。 (无论你需要什么时间,都要这样做。)
但是,这完全取决于您的网站访问量有多大,并且可能无法可靠地运行。
答案 1 :(得分:0)
当您创建计时器并挂钩其tick / elapsed事件时,请将间隔设置为每5分钟左右。
然后在tick / elapsed事件处理程序中,检查当前时间并在必要时执行操作。显然你还需要记录actino的执行时间,这样你就不会在10:58和晚上11点03分执行它。
答案 2 :(得分:0)
查看Quartz.NET,这将允许您设置类似cron的触发器。
答案 3 :(得分:0)
也许以不同的方式做你想做的事情:也许你可以只使用Windows调度程序来安排你的活动,而不是依赖于ASP。它具有您想要的更多调度功能,并且可能更加可靠,并且已经过调试。您的定时事件可以像访问http://localhost/YourApp/一样简单.aspx。您将获得相同的效果,如果您的应用程序恰好已经回收,您的活动仍将作为第一个请求执行。
答案 4 :(得分:0)