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;
}
}
});
}
}
}