C# 使用Timer设置一个定时任务
程序员文章站
2024-01-23 14:12:22
...
好久没更新博客了,这次记录一个最近写的定时任务,使用的是.NET4.0自带的一个System.Timers执行定时任务,话不多说,先上代码。
1、在Global.asax文件的Application_Start方法里面加入如下代码:
//定义定时器
//1000表示1秒的意思
System.Timers.Timer myTimer = new System.Timers.Timer(1000 * 60 * 10);
//TaskAction.SetContent 表示要调用的方法
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(TaskAction.SetContent);
myTimer.Enabled = true;
myTimer.AutoReset = true;
2、自定义TaskAction类用于处理需要定时执行的任务:
public static class TaskAction
{
/// <summary>
/// 定时器委托任务 调用的方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
public static void SetContent(object source, ElapsedEventArgs e)
{
//DateTime now = DateTime.Now;
//if (now.Hour == 12 || now.Hour == 18 || now.Hour == 23)
//{
//这里写你定时执行的代码
new LEOController().adddata();
//}
}
/// <summary>
/// 应用池回收的时候调用的方法
/// </summary>
public static void SetContent()
{
}
}
3、在Global.asax文件里添加Session_End方法,用于Session失效时执行
protected void Session_End(object sender, EventArgs e)
{
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
System.Threading.Thread.Sleep(1000);
//触发事件, 写入提示信息
TaskAction.SetContent();
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
//使用您自己的URL
string url = "http://127.0.0.1:8080";
System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();
System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。
// 如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
4、在web.config中配置sessionState,设置session的模式和过期时间
<sessionState mode="InProc"
cookieless="false"
timeout="30"/>
mode="InProc"表示当前服务器下的session,timeout="30"表示过期时间为半小时,这里的设置很关键,由于之前没有配置session,如果站点长时间没有被访问,导致session过期后程序池自动回收就不在执行定时任务,所以前面执行Session_End方法时,重新访问了一下站点服务器,目的是要激发Application_Start,从而激发定时任务。
上一篇: linux下的时钟编程
推荐阅读
-
C# 使用Timer设置一个定时任务
-
如何使用纯PHP实现定时器任务(Timer)
-
C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...
-
spingboot中使用scheduled设置定时任务注意事项
-
详解使用python crontab设置linux定时任务
-
详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
-
C#使用timer定时在屏幕上输出信息的方法
-
C#使用timer定时在屏幕上输出信息的方法
-
详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
-
Python使用crontab模块设置和清除定时任务操作详解