业务场景:有主表、子表两个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();
         };
     }
}