在控制台应用程序的后台永久 运行 执行任务
Have tasks permanently run in background in Console application
我将从描述我想要实现的目标开始。这个想法是我有多个 class 的对象,它们有自己不同的计时器。当对象的计时器 运行 结束时,我希望该对象向控制台打印一条消息,然后重置计时器。我希望在后台 运行 这样我的应用程序可以在这些多个计时器 运行 在后台时继续工作。
例如像这样初始化(其中参数是以秒为单位的计时器):
BackGroundTimer timer1 = new BackGroundTimer(1);
BackGroundTimer timer2 = new BackGroundTimer(2);
BackGroundTimer timer3 = new BackGroundTimer(3);
Console.ReadLine();
其中 Console.ReadLine() 表示正在进行的工作。那么理想情况下我希望有以下输出:
0:
1: Timer1
2: Timer1 Timer2
3: Timer1 Timer3
4: Timer1 Timer2
这可以实现吗?
看看Timer class。您可以在其构造函数中指定周期,它会周期性地调用指定的方法。
编辑:下面的代码示例
static void Main(string[] args)
{
Timer timer1 = new Timer(1000)
{
Enabled = true,
AutoReset = true
};
Timer timer2 = new Timer(2000)
{
Enabled = true,
AutoReset = true
};
Timer timer3 = new Timer(3000)
{
Enabled = true,
AutoReset = true
};
timer1.Elapsed += async (sender, e) => await HandleTimer("Timer1");
timer2.Elapsed += async (sender, e) => await HandleTimer("Timer2");
timer3.Elapsed += async (sender, e) => await HandleTimer("Timer3");
Console.ReadLine();
}
private static async Task HandleTimer(string message)
{
Console.WriteLine(message);
}
我将从描述我想要实现的目标开始。这个想法是我有多个 class 的对象,它们有自己不同的计时器。当对象的计时器 运行 结束时,我希望该对象向控制台打印一条消息,然后重置计时器。我希望在后台 运行 这样我的应用程序可以在这些多个计时器 运行 在后台时继续工作。
例如像这样初始化(其中参数是以秒为单位的计时器):
BackGroundTimer timer1 = new BackGroundTimer(1);
BackGroundTimer timer2 = new BackGroundTimer(2);
BackGroundTimer timer3 = new BackGroundTimer(3);
Console.ReadLine();
其中 Console.ReadLine() 表示正在进行的工作。那么理想情况下我希望有以下输出:
0:
1: Timer1
2: Timer1 Timer2
3: Timer1 Timer3
4: Timer1 Timer2
这可以实现吗?
看看Timer class。您可以在其构造函数中指定周期,它会周期性地调用指定的方法。
编辑:下面的代码示例
static void Main(string[] args)
{
Timer timer1 = new Timer(1000)
{
Enabled = true,
AutoReset = true
};
Timer timer2 = new Timer(2000)
{
Enabled = true,
AutoReset = true
};
Timer timer3 = new Timer(3000)
{
Enabled = true,
AutoReset = true
};
timer1.Elapsed += async (sender, e) => await HandleTimer("Timer1");
timer2.Elapsed += async (sender, e) => await HandleTimer("Timer2");
timer3.Elapsed += async (sender, e) => await HandleTimer("Timer3");
Console.ReadLine();
}
private static async Task HandleTimer(string message)
{
Console.WriteLine(message);
}