C#-在需要时从多个正在运行的计时器中释放一个特定的计时器



我创建了一个代码,该代码按照用户输入的时间间隔调度作业,该用户使用的方法将后台线程作为任务运行,并且调度由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);
}

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

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

也许你可以在一个ListElapsed事件中添加每个定时器,在执行任务后(无论什么(,你可以在TagStopDispose的基础上在List of Timers中找到特定的定时器

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
}

相关内容

  • 没有找到相关文章

最新更新