我的目标是在命令未执行10分钟后发送一条消息,然后每隔1分钟发送一次。一开始我尝试过这样的事情:
namespace MinecraftClient.ChatBots
{
public class WallTimer
{
public static Timer wallTimer;
internal static Task StartTimer()
{
wallTimer = new Timer()
{
Interval = 60000,
AutoReset = true,
Enabled = true
};
wallTimer.Elapsed += OnTimerTicked;
return Task.CompletedTask;
}
private static void OnTimerTicked(object sender, ElapsedEventArgs e)
{
Program.SendAlertDiscord();
}
}
}
发送命令时,我打算停止计时器,等待10分钟,然后再次启动计时器。我在定义使用timer.Stop
函数时遇到了麻烦,因为我认为它在System.Timers
中不起作用。如果有人能在10分钟后以更有效的方式发送这些警报,那么我也欢迎您提出建议。
答案 0 :(得分:0)
您不需要为此停止计时器。计时器有一种方法Change
,它允许任务何时再次消失,您可以根据需要根据业务进行更改。
可以修改的示例可以是
wallTimer= new Timer(new TimerCallback(OnTimerTicked));//OnTimerTicked is function for anything to do when timer is done
DateTime scheduledTime = DateTime.Now.AddMinutes(10);//Can be configurable
TimeSpan timeSpan = scheduledTime.Subtract(DateTime.Now);
int dueTime = Convert.ToInt32(timeSpan.TotalMilliseconds);
wallTimer.Change(dueTime, Timeout.Infinite);
您可以编写基于设置的可配置条件每10分钟或1分钟调用一次的递归函数
您可以参考的一些示例是:
http://www.nullskull.com/q/10075796/create-an-infinite-loop-in-a-windows-service.aspx http://www.informit.com/articles/article.aspx?p=415982&seqNum=2