0

我创建了一个代码,该代码在用户输入的时间间隔内调度作业,该时间间隔使用将后台线程作为任务运行的方法,并且调度由 System.Threading.Timer 类负责。用户可以选择根据将发生的特定任务同时安排多个作业,但驱动它们的计时器方法是相同的,基于用户输入的时间间隔。现在如果用户想取消一个特定的工作,我该怎么做?请帮助我是这个领域的新手!以下是供参考的大纲,因为我无法发布完整的代码:

按钮单击 => 应用程序获取作业名称、作业时间、间隔并调用方法

下面是我的调度程序代码 =>

public void ScheduleTask(int Year, int Month, int Day, int hour, int min, double intervalInHour, Action task)
    {
        DateTime now = DateTime.Now;
        DateTime firstRun = new DateTime(Year, Month, Day, hour, min, 0, 0);
        if (now > firstRun)
        {
            firstRun = firstRun.AddDays(1);
        }
        TimeSpan timeToGo = firstRun - now;
        if (timeToGo <= TimeSpan.Zero)
        {
            timeToGo = TimeSpan.Zero;
        }
        var timer = new Timer(x =>
        {
           task.Invoke();
        }, null, timeToGo, TimeSpan.FromHours(intervalInHour));
        timers.Add(timer);
    }

用户可以安排多个工作,但如果他想取消一个,我应该如何处理?提前致谢!

4

1 回答 1

0

解决方案可能是创建一个基于 Timer 的自定义类。只需添加您喜欢的任何成员,然后从“Elapsed”事件处理程序的“sender”参数中获取您的自定义 Timer 对象:

也许您可以在执行任务(无论如何)后ListElapsed事件List of Timers中添加每个计时器TagStopDispose

 class CustomTimer : System.Timers.Timer
    {
        public string Tag;
    }

    private void StartTimer()
    {
        var timer = new CustomTimer
        {
            Interval = 3000,
            Tag= "FirstTimer"
        };

        timer.Elapsed += timer_Elapsed;
        timer.Start();
    }

    void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        string tag = ((CustomTimer)sender).Tag;
        // perform whatever operation
        // here compare this timer in existing timers list 
        // and stop this timer
    }
于 2020-04-12T06:20:17.130 回答