• 神奇的Timer


    最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下

    注:这里的Timer类特指System.Threading.Timer类

    情景1:我需要服务器在每天的00:00点执行一个操作

    我当开始想到的方法很2b,居然是设定定时器每个1分钟去检查时间,如果当前时间与00:00相差不超过1分钟时,就执行操作!!!由于这段的代码太过2b,所以就不放上来了!

    我都不知道自己刚开始怎么会想到如此2的设计,几乎刚把代码写完我自己就把这个方案个否定了,极度浪费资源不说,还不能精准的在00:00执行操作!

    于是我又一次查看了msdn,msdn真是编程神器啊,现在我离开了它简直是寸步难行了,我惊喜的发现Timer的构造函数中有这样一个参数

    这个dueTime参数不正是我需要的吗?只不过我以前一般忽略了这个参数,直接将其置为0了!所以我立刻写下了下面的代码

    1 var span = DateTime.Today.AddDays(1) - DateTime.Now;
    2 var timer = new Timer(callback, null, (int)span.TotalMilliseconds, 24 * 3600 * 1000);

    于是在第二天的00:00,定时器就开始执行,然后每隔24小时执行一次,这样就完美的达到了情景中的目标!

    情景2:我需要每个5分钟保存一次RichTextBox中的内容

    这实际上就是一个类似Word的自动保存功能,刚开始我觉得很简单,不就是定义一个5分钟的定时器就了事吗?后来想想不这么简单,因为如果用户不在RichTextBox更改任何内容,这是还是隔5分钟保存一次就是资源浪费!于是可以将上述情景更加精确的描述为:

    在用户每次对RichTextBox的内容修改之后的5分钟时,对RichTextBox中内容保存一次!

    这样又如何去实现呢?于是我又一次查看了MSDN,果然没让我失望,MSDN又一次给了我惊喜,请看下面的MSDN说明

    这句话简直就是为了解决情境中的问题说的啊!于是我立刻写下了下面的代码:

     1 System.Threading.Timer timer = null;
     2         bool needSave = false;
     3         private void richTextBox1_TextChanged(object sender, EventArgs e)
     4         {
     5             if (timer == null)
     6                 timer = new System.Threading.Timer(Callback, null, 5 * 60 * 1000, 0);
     7             else if (needSave)
     8             {
     9                 needSave = false;
    10                 timer.Change(5 * 60 * 1000, 0);
    11             }
    12         }
    13         void Callback(object state)
    14         {   
    15             Save();
    16             needSave = true;
    17         }
    将period参数置为0,就意味着定时器只会执行一次,此时定时功能是依靠参数dueTime来实现的,Change函数可以重启定时功能,并且每次RichTextBox中有内容的改变,定时器就会被重置,这样就完美的解决了情境中的问题了!
            
  • 相关阅读:
    数据分析day04
    数据分析day03
    数据分析 day02
    Index of /android/repository
    WPF ListView 数据懒加载
    WPF TextBlock 文字超长截断并显示省略符号
    android adb socket 通信
    android 获取 cpu 频率信息
    Android 联系人导入导出(VCard格式)
    Android Contact 导入导出 vcf格式(不依赖第三方库)
  • 原文地址:https://www.cnblogs.com/ILoveSleep/p/3133322.html
Copyright © 2020-2023  润新知