如果在特定时间内未执行命令,则会导致发出警报

时间:2018-09-10 00:23:23

标签: c# discord.net

我的目标是在命令未执行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分钟后以更有效的方式发送这些警报,那么我也欢迎您提出建议。

1 个答案:

答案 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