業務場景:有主表、子表兩個GridView點擊主表的行,會自動讀取主表對應的子表數據但是如果反覆點擊會導致反覆讀取,其實反覆點擊的時候只需要最後一次執行查詢,前面的幾次點擊都是無意義操作根據這一需求設計了一個函數:private static List Tup = new List();/// //... ...
業務場景:有主表、子表兩個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();
};
}
}