ASP.NET中的计时器类

ASP.NET中的计时器类,asp.net,timer,Asp.net,Timer,我在asp.net应用程序start evert中有这段代码,我不太熟悉Timer类,但我想做的是有一个触发器,每天晚上11点触发,一个在早上5:30触发,然后每小时触发 private System.Threading.Timer timer; protected void Application_Start(object sender, EventArgs e) { int intervalMilliseconds = 60 * 1000; timer = new Sys

我在asp.net应用程序start 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类以及如何使用它。

当你创建计时器并连接它的tick/appeased事件时,将间隔设置为每5分钟左右


然后在tick/appeased事件处理程序中,检查当前时间,并在必要时执行操作。显然,您还需要记录何时执行了actino,这样您就不会在晚上10:58和11:03执行它。

请看一下,这将允许您设置类似于cron的触发器。

可能是另一种做您想要做的事情的方式:不依赖ASP来激活,也许您可以使用windows调度程序来安排您的事件。它有更多您想要的调度功能,并且可能更可靠,并且已经调试过了。您的定时事件可以像访问.aspx一样简单。如果你的应用程序碰巧回收了,你的事件仍然会作为第一个请求执行。你可以使用内置的ASP.NET缓存。Add CacheItemRemovedCallback委托来完成你描述的事情,这样做的好处与你得到的效果相同。这是一种迂回的使用方式,但是你可以通过这种方式进行有效的调度

有一篇文章展示了如何做这件事

有关CacheItemRemovedCallback的详细信息


编辑:我知道你说没有服务,但是如果你检查服务器,发现你可以使用计划任务,你可以使用它按照其他答案提到的特定计划运行控制台应用程序。

根据你的问题,我假设你不能完全控制你的托管环境,所以我会尽量避免安排它。。。等答案

话虽如此,您仍然需要了解asp.net生命周期,并且您的触发方法充满了危险

您是否获得了足够的流量,应用程序不会意外终止?你知道IIS的配置吗,所以回收不用担心

我可以看到三种方法:

我建议使用一个页面,它使用某种类型的键,这是唯一已知的 打电话的人。使用鼠标(请参阅:)或pc/服务器上的计划爬虫程序触发此页面,该爬虫程序将在需要时始终处于打开状态

另一种方法是触发数据库进程,该进程在需要时运行。 根据您的环境,这也可以安排

另一种方法是检查访问页面的用户的日志文件,如果这是一小时内的第一次访问,则触发您的进程。(无论你需要什么时间,都要这样做。)

但是,这完全取决于网站的访问量,并且可能无法可靠地工作。

为什么您声明不希望人们告诉您不要在asp.net中使用它,因为它的生命周期?Asp.net是一种用于与客户端应用程序通信的服务器技术,不应依赖它来运行计时器计划中的应用程序。尽管如此,根据我下面的回答,您可以通过一种方法来完成。也许您应该重新提问,而不必在Asp.net上下文中构建它。有更好的方法可以在Windows服务器上实现您似乎想要的功能。为什么???我在asp.net应用程序中使用它,但我的问题是“我应该使用asp.net运行触发器吗??”我不想听起来很生气,但我似乎花了很长时间才在这个网站上得到答案,因为很多人不得不添加很多额外的讨论。这对我不起作用,因为常见的问题。由于部分受信任,日志记录引发安全错误。。。