首页 > 解决方案 > 如果命令未在特定时间内完成,则会发出警报

问题描述

我的目标是在命令未完成后 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 分钟后发送这些警报,我也愿意接受建议。

标签: c#discord.net

解决方案


您不需要停止计时器的要求。Timer 有一种方法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


推荐阅读