using System; using System.Threading; using System.Threading.Tasks; namespace BBWYB.Common.Trigger { /// /// 延迟触发组件 /// public class DelayTrigger { public DelayTrigger(int delayTime = 1000) { if (delayTime < 1000) delayTime = 1000; this.delayTime = delayTime; } /// /// 延迟执行时间(ms) /// private int delayTime; /// /// 关键字 /// private string currentKey; /// /// 是否可以执行 /// private volatile bool canExecute; /// /// 是否正在延迟响应中 /// private volatile bool isDelaying; public Action OnExecute; public void SetKey(string key) { currentKey = key; if (isDelaying) { canExecute = false; return; } Task.Factory.StartNew(delegate { isDelaying = true; while (true) { canExecute = true; Thread.Sleep(delayTime); if (canExecute) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"DelayTrigger {currentKey} Execute at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")}"); Console.ResetColor(); OnExecute?.Invoke(currentKey); isDelaying = false; break; } } }); } } }