延时执行函数:前浪死在沙滩上

Posted MyRapid 快速开发框架

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了延时执行函数:前浪死在沙滩上相关的知识,希望对你有一定的参考价值。

业务场景:有主表、子表两个GridView点击主表的行,会自动读取主表对应的子表数据

但是如果反复点击会导致反复读取,其实反复点击的时候只需要最后一次执行查询,前面的几次点击都是无意义操作

根据这一需求设计了一个函数:

private static List<System.Windows.Forms.Timer> Tup = new List<System.Windows.Forms.Timer>();
/// <summary>
/// 延时执行
/// </summary>
/// <param name="easySub">需要执行的代码/函数</param>
/// <param name="keyName">任务分组</param>
/// <param name="timeOut">等待timeOut时间后执行代码,如果当前分组中进入新的任务则前面的任务放弃,执行新的任务</param>
/// <param name="chkStatus">等待一定时间且循环验证chkStatus</param>
public static void DelayRun(Action easySub, string keyName, int timeOut = 501)
{
     System.Windows.Forms.Timer lastTimer = Tup.Find(t => t.Tag.ToStringEx() == keyName);
     if (lastTimer != null)
     {
         lastTimer.Enabled = false;
         lastTimer.Enabled = true;
     }

    if (lastTimer == null)
     {
         System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
         t.Interval = timeOut;
         t.Enabled = true;
         t.Tag = keyName;
         Tup.Add(t);
         t.Tick += delegate (object sender, EventArgs e)
         {
             ((System.Windows.Forms.Timer)sender).Enabled = false;
             string name = keyName;
             easySub();
         };
     }
}

以上是关于延时执行函数:前浪死在沙滩上的主要内容,如果未能解决你的问题,请参考以下文章

几款远程登录软件的对比

[推前浪 -1] Java虚拟机内存模型

C# 延时处理或者暂停执行

FreeRTOS高级篇9---FreeRTOS系统延时

延时执行

怎么用定时器写延时函数