C# - 在多个 运行 计时器需要时处理特定计时器
C# - Disposing a specific timer whenever required from multiple running timers
我创建了一个代码,它按用户输入的时间间隔安排作业,该代码使用 运行 后台线程作为任务的方法,并且调度由 System.Threading.Timer class。用户可以选择根据哪个特定任务将发生同时安排多个作业,但驱动它们的计时器方法是相同的,具体取决于用户输入的时间间隔。现在如果用户想取消一个特定的工作,我该怎么做?请帮助我是这个领域的新手!
以下是参考大纲,因为我无法 post 完整代码:
单击按钮 => 应用程序获取作业名称、作业时间、间隔并调用方法
下面是我的调度程序代码=>
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);
}
用户可以安排多个作业,但如果他想取消一个作业,我该如何处理?提前致谢!
解决方案可能是创建一个基于计时器的自定义 class。只需添加您喜欢的任何成员,然后从 "Elapsed" 事件处理程序的 "sender" 参数中获取您的自定义 Timer 对象:
也许您可以在 List
和 Elapsed
事件中添加每个计时器,然后在执行您的任务(无论如何)后,您会根据以下内容在 List of Timers
中找到该计时器Tag
和 Stop
或 Dispose
特定计时器
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
}
我创建了一个代码,它按用户输入的时间间隔安排作业,该代码使用 运行 后台线程作为任务的方法,并且调度由 System.Threading.Timer class。用户可以选择根据哪个特定任务将发生同时安排多个作业,但驱动它们的计时器方法是相同的,具体取决于用户输入的时间间隔。现在如果用户想取消一个特定的工作,我该怎么做?请帮助我是这个领域的新手! 以下是参考大纲,因为我无法 post 完整代码:
单击按钮 => 应用程序获取作业名称、作业时间、间隔并调用方法
下面是我的调度程序代码=>
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);
}
用户可以安排多个作业,但如果他想取消一个作业,我该如何处理?提前致谢!
解决方案可能是创建一个基于计时器的自定义 class。只需添加您喜欢的任何成员,然后从 "Elapsed" 事件处理程序的 "sender" 参数中获取您的自定义 Timer 对象:
也许您可以在 List
和 Elapsed
事件中添加每个计时器,然后在执行您的任务(无论如何)后,您会根据以下内容在 List of Timers
中找到该计时器Tag
和 Stop
或 Dispose
特定计时器
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
}