c#使用委托创建三个不同时间的定时器
时间: 2024-10-20 09:04:42 浏览: 8
在C#中,你可以通过委托(Delegate)结合不同的定时器类来实现设定不同时间间隔的定时任务。这里以DispatcherTimer(适用于Windows Presentation Foundation,WPF环境)和System.Timers.Timer为例展示:
**1. 使用DispatcherTimer (WPF)**[^2]
```csharp
using System;
using System.Windows.Threading;
public class TimerExample
{
private DispatcherTimer dispatcherTimer;
public void StartTimers(int delay1, int delay2, int delay3)
{
// 创建DispatcherTimer实例并设置事件处理程序
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(delay1);
dispatcherTimer.Tick += OnTick;
// 启动定时器
dispatcherTimer.Start();
// 另两个定时器示例
// 模拟稍后的两个定时器
Action action2 = () => Console.WriteLine($"Second timer after {delay2} seconds");
Action action3 = () => Console.WriteLine($"Third timer after {delay3} seconds");
// 使用Action委托和Task.Delay(非线程安全,仅示例)
Task.Run(() => Task.Delay(TimeSpan.FromSeconds(delay2)).ContinueWith(_ => action2()));
Task.Run(() => Task.Delay(TimeSpan.FromSeconds(delay3)).ContinueWith(_ => action3()));
}
private void OnTick(object sender, EventArgs e)
{
Console.WriteLine("First timer triggered.");
}
}
```
**2. 使用System.Timers.Timer**
```csharp
using System;
using System.Timers;
public class TimerExample
{
private Timer timer;
public void StartTimers(int delay1, int delay2, int delay3)
{
// 创建System.Timers.Timer实例并设置事件处理程序
timer = new Timer();
timer.Interval = delay1 * 1000; // 转换秒为毫秒
timer.Elapsed += OnElapsed;
// 启动定时器
timer.Start();
// 延迟稍后的任务
ThreadPool.QueueUserWorkItem(_ => Console.WriteLine($"Second timer after {delay2} seconds"));
ThreadPool.QueueUserWorkItem(_ => Console.WriteLine($"Third timer after {delay3} seconds"));
}
private void OnElapsed(Object source, ElapsedEventArgs e)
{
Console.WriteLine("First timer triggered.");
}
}
```
阅读全文