基于服务器的计时器

1 简介
在visio studio .net 和.net FrameWork 中有三种计时器控件:
1、 基于服务器的计时器,位于工具箱上的组件选项卡
基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的,由于使用不同的体系结构,他要比windows计时器精确的多。基于服务器的计时器可以在线程间移动处理引发的任务。
2、 基于windows 的标准计时器,位于工具箱的windows窗体选项卡
他是为单线程环境设计的,其中,UI线程用于执行处理。Windows计时器的计时精度为55毫秒。这些传统的计时器需要用户代码有一个可用的UI消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程中。对于com组件来说这会降低性能。
3、 仅可以在编程时使用的线程计时器
对消息不在线程上发送的方案中,线程计时器是非常有用的。例如,基于 Windows 的计时器依赖于操作系统计时器的支持,如果不在线程上发送消息,与计时器相关的事件将不会发生。在这种情况下,线程计时器就非常有用。
2 基于服务器的计时器的关键编程元素
2.1 编程元素
Timer 组件引发一个名为 Timer.Elapsed 的事件。您可以为这个事件创建处理程序来执行处理要发生的一切。
Timer 组件的一些更重要的属性和方法还包含:
Interval 属性用来设置引发事件的时间范围,以毫秒计。例如,值为 1000 的时间间隔将一秒钟引发一次事件。
AutoReset 属性决定在给定时间间隔过去之后计时器是否继续引发事件。如果设置成 true,计时器继续重新计算时间间隔并引发事件。如果为 false,它在时间间隔过去后只引发一次事件,然后停止。
Start 方法将计时器的 Enabled 属性设置为 true,它允许计时器开始引发事件。如果计时器已经是启用状态,则调用 Start 方法将重置该计时器。
Stop 方法将计时器的 Enabled 属性设置成 false,以防止计时器再引发事件。
2.2 创建基于服务器计时器的实例
首先引用System.Timers的命名空间,将timer组件托到设计视图。
System.Timers.Timer timer = new System.Timers.Timer();
timer.Enable = true;
timer.Inerval = 3000;
加载引发事件
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);

在private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)中写任务事件。
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
 string p = @"C:/Inetpub/wwwroot/WebApplication6";
 //我们在虚拟目录的根目录下建立SchedulerJob文件夹,并设置权限为匿名可修改,
 //SchedulerJob.txt就是我们所写的文件
 string FILE_NAME = p+ "//11.txt";
 //取得当前服务器时间,并转换成字符串
 //string c = System.DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss");
 //标记是否是新建文件的标量
 bool flag = false;
 //如果文件不存在,就新建该文件
 if (!File.Exists(FILE_NAME))
 {
  flag = true;
  StreamWriter sr = File.CreateText(FILE_NAME);
  sr.Close();
 }
 //向文件写入内容
 try
 {
  StreamWriter x = new StreamWriter(FILE_NAME,true,System.Text.Encoding.Default);
  if(flag) x.Write("计划任务测试开始:");
  x.Write("/r/n"+DateTime.Now.ToLongTimeString());
  x.Close();
 }
 catch(Exception ex)
 {
  Response.Write(ex.Message);
 }
}

阅读更多
上一篇存储过程编写经验优化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭